lipengcheng 4 days ago
parent
commit
d7a0553e00
  1. 4
      epmet-apartment-front/index.html
  2. 100
      package-lock.json
  3. 13
      package.json
  4. 121
      src/api/indexH5.ts
  5. BIN
      src/assets/images/changeRoomOkBac.png
  6. BIN
      src/assets/images/changeTime.png
  7. BIN
      src/assets/images/changeTimeBac.png
  8. BIN
      src/assets/images/changeTimeBac2.png
  9. BIN
      src/assets/images/eyeClose.png
  10. BIN
      src/assets/images/eyeOpen.png
  11. BIN
      src/assets/images/resultBac.png
  12. BIN
      src/assets/images/shibai.png
  13. 952
      src/assets/quill.bubble.css
  14. 397
      src/assets/quill.core.css
  15. 945
      src/assets/quill.snow.css
  16. 9
      src/components/AppHeader.vue
  17. 2
      src/components/ImagePreview.vue
  18. 16
      src/main.js
  19. 6
      src/router/index.js
  20. 22
      src/utils/http.ts
  21. 86
      src/utils/sm4.js
  22. 22
      src/views/policy/index.vue
  23. 2
      src/views/showings/apartmentDetail.vue
  24. 2
      src/views/showings/houseDetail.vue
  25. 749
      src/views/test/index.vue

4
epmet-apartment-front/index.html

@ -7,8 +7,8 @@
<link rel="apple-touch-icon" href="/favicon.svg">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>青岛市免租金住房保障平台</title>
<script type="module" crossorigin src="/epmet-apartment-front/static/index-C6AMzBbb.js"></script>
<link rel="stylesheet" crossorigin href="/epmet-apartment-front/static/index-DAF00gGn.css">
<script type="module" crossorigin src="/epmet-apartment-front/static/index-CkWrYbs0.js"></script>
<link rel="stylesheet" crossorigin href="/epmet-apartment-front/static/index-BjgI0PLE.css">
</head>
<body>
<div id="app"></div>

100
package-lock.json

@ -12,6 +12,7 @@
"@element-plus/icons-vue": "^2.3.2",
"axios": "^1.7.2",
"element-plus": "^2.10.2",
"quill": "^2.0.3",
"reka-ui": "^2.3.0",
"vue": "^3.5.13",
"vue-i18n": "^9.14.4",
@ -2795,6 +2796,11 @@
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"node_modules/eventemitter3": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz",
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
},
"node_modules/execa": {
"version": "9.6.0",
"resolved": "https://registry.npmmirror.com/execa/-/execa-9.6.0.tgz",
@ -2821,6 +2827,11 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
"node_modules/fast-diff": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz",
"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="
},
"node_modules/fast-glob": {
"version": "3.3.3",
"resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
@ -3451,6 +3462,17 @@
"lodash-es": "*"
}
},
"node_modules/lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
},
"node_modules/lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
"deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead."
},
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
@ -3718,6 +3740,11 @@
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
"dev": true
},
"node_modules/parchment": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/parchment/-/parchment-3.0.0.tgz",
"integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A=="
},
"node_modules/parse-ms": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz",
@ -3996,6 +4023,33 @@
}
]
},
"node_modules/quill": {
"version": "2.0.3",
"resolved": "https://registry.npmmirror.com/quill/-/quill-2.0.3.tgz",
"integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==",
"dependencies": {
"eventemitter3": "^5.0.1",
"lodash-es": "^4.17.21",
"parchment": "^3.0.0",
"quill-delta": "^5.1.0"
},
"engines": {
"npm": ">=8.2.3"
}
},
"node_modules/quill-delta": {
"version": "5.1.0",
"resolved": "https://registry.npmmirror.com/quill-delta/-/quill-delta-5.1.0.tgz",
"integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==",
"dependencies": {
"fast-diff": "^1.3.0",
"lodash.clonedeep": "^4.5.0",
"lodash.isequal": "^4.5.0"
},
"engines": {
"node": ">= 12.0.0"
}
},
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",
@ -6666,6 +6720,11 @@
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"eventemitter3": {
"version": "5.0.1",
"resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz",
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
},
"execa": {
"version": "9.6.0",
"resolved": "https://registry.npmmirror.com/execa/-/execa-9.6.0.tgz",
@ -6686,6 +6745,11 @@
"yoctocolors": "^2.1.1"
}
},
"fast-diff": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz",
"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="
},
"fast-glob": {
"version": "3.3.3",
"resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
@ -7098,6 +7162,16 @@
"integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
"requires": {}
},
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
},
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
},
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
@ -7294,6 +7368,11 @@
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
"dev": true
},
"parchment": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/parchment/-/parchment-3.0.0.tgz",
"integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A=="
},
"parse-ms": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz",
@ -7450,6 +7529,27 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
"quill": {
"version": "2.0.3",
"resolved": "https://registry.npmmirror.com/quill/-/quill-2.0.3.tgz",
"integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==",
"requires": {
"eventemitter3": "^5.0.1",
"lodash-es": "^4.17.21",
"parchment": "^3.0.0",
"quill-delta": "^5.1.0"
}
},
"quill-delta": {
"version": "5.1.0",
"resolved": "https://registry.npmmirror.com/quill-delta/-/quill-delta-5.1.0.tgz",
"integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==",
"requires": {
"fast-diff": "^1.3.0",
"lodash.clonedeep": "^4.5.0",
"lodash.isequal": "^4.5.0"
}
},
"read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",

13
package.json

@ -9,22 +9,23 @@
"preview": "vite preview"
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.2",
"@amap/amap-jsapi-loader": "^1.0.1",
"axios": "^1.7.2",
"element-plus": "^2.10.2",
"quill": "1.3.7",
"reka-ui": "^2.3.0",
"vue": "^3.5.13",
"vue-i18n": "^9.14.4",
"vue-router": "^4.5.1",
"@amap/amap-jsapi-loader": "^1.0.1",
"axios": "^1.7.2",
"element-plus": "^2.10.2"
"gm-crypt": "0.0.2"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.2.3",
"autoprefixer": "^10.4.21",
"postcss": "^8.5.4",
"sass": "^1.89.0",
"tailwindcss": "^3.4.0",
"vite": "^6.2.4",
"vite-plugin-vue-devtools": "^7.7.2",
"sass": "^1.89.0"
"vite-plugin-vue-devtools": "^7.7.2"
}
}

121
src/api/indexH5.ts

@ -0,0 +1,121 @@
// 开发环境配置文件
let developUrl = ''
if (process.env.NODE_ENV === 'development') {
// 开发环境
// developUrl = 'http://192.168.1.144:8080/mz-api'
developUrl = 'http://219.146.91.110:30801/mz-api'
} else if (process.env.NODE_ENV === 'buildQd') {
// 打包环境
// developUrl = 'http://172.16.31.169:80/mz-api'
// developUrl = 'http://120.221.95.60:8080/mz-api' // 正式环境
// developUrl = 'https://hrss.qingdao.gov.cn/mzjapi'
developUrl = 'https://hrsswb.qingdao.gov.cn:8080/mz-api'
} else {
developUrl = 'http://219.146.91.110:30801/mz-api' // 外网环境
}
const api = {
Login: '/user/login',
UserInfo: '/user/userinfo',
UserName: '/user/name',
listHouseWithCount: developUrl + '/mz/choose/list-house-with-count', // 区域-黄岛区房型-地图上统计数据
listHouseTypeWithCount: developUrl + '/mz/choose/list-house-type-with-count', // 区域-黄岛区房型-房型统计列表
areasList: developUrl + '/system/dept/listForH5', // 获取区域下拉框
apartmentList: developUrl + '/system/dept/apartmentsForH5', // 获取公寓下拉框
// houseTypeList: developUrl + '/mz/housetype/listForH5', // 获取房型下拉框
houseTypeList: developUrl + '/asdh5/chooseRoom/selectMzHouseTypeListForH5Special', // 获取房型下拉框
getInfoForH5: developUrl + '/mz/housetype/h5/getInfoForH5', // 房型详情
estateSurrounding: developUrl + '/system/dept/query/getInfoForH5', // 小区及周边
listBookHouse: developUrl + '/mz/choose/list-book-house', // 楼栋+单元
// listHouseByUnitId: developUrl + '/mz/choose/listHouseByUnitId', // 楼层-房屋
listHouseByUnitId: developUrl + '/mz/choose/getHouseInfoByRedis', // 楼层-房屋更换接口
getRoomInfoByHouseId: developUrl + '/mz/room/getRoomInfoByHouseId', // 选择房间
leftQuota: developUrl + '/asdh5/chooseRoom/leftQuota', // 【选房】查询天数余额
chooseRoomChoose: developUrl + '/asdh5/chooseRoom/choose', // 【H5】锁定房源
supplementOfChooseRoom: developUrl + '/asdh5/chooseRoom/supplementOfChooseRoom', // 【H5选房】补充选房信息
userLogin: developUrl + '/asdh5/user/login', // 【H5】登录
userDetail: developUrl + '/asdh5/user/detail', // 【H5】查询当前用户信息
chooseRoomRecPage: developUrl + '/chooseRoomRec/page', // 查询选房记录
chooseRoomRecCancel: developUrl + '/chooseRoomRec/cancel', // 取消预约
pageForAsd: developUrl + '/asdh5/mzPolicy/pageForAsd', // 爱山东分页查询所有数据新闻
mzPolicy: developUrl + '/asdh5/mzPolicy/', // 爱山东查询单挑资讯和详情
queryTop5: developUrl + '/asdh5/mzPolicy/queryTop5', // 查询置顶的最新的5条数据
supplementary: developUrl + '/mz/graduate/supplementary', // 补充材料
upload: developUrl + '/common/upload', // 文件上传
selectMzGraduateInfo: developUrl + '/mz/graduate/selectMzGraduateInfo', // 获取毕业生详细信息
graduate: developUrl + '/mz/graduate/', // 获取毕业生详细信息
graduateEdit: developUrl + '/asdh5/graduate/edit', // 修改毕业生
// selectMzGraduateInfoH5: developUrl + '/asdh5/graduate/selectMzGraduateInfo', //【h5】获取毕业生详细信息
selectMzGraduateInfoH5: developUrl + '/asdh5/user/detail', //从redis里获取毕业生信息
renewalApplication: developUrl + '/asdh5/renewal/renewalApplication/', // 续期申请查询
submit: developUrl + '/asdh5/renewal/submit', // 续期申请提交
systemDept: developUrl + '/asdh5/chooseRoom/getApartmentInfo/', // 公寓电话
blacklist: developUrl + '/asdh5/user/isInBlackList', // 黑名单查询
selectBlackGraduateDetail: developUrl + '/asdh5/user/selectBlackGraduateDetail', // 返回当前登录的毕业生的黑名单详情
dictDataList: developUrl + '/system/dict/data/list', // 字典列表
queryRenewalRecord: developUrl + '/asdh5/renewal/queryRenewalRecord', // 查询毕业生续期记录
checkLatestStateByGraduateId: developUrl + '/asdh5/user/checkLatestStateByGraduateId', // 【H5】登录选房确认
getDict: developUrl + '/system/dict/data/getDict', // 字典lable
messagePage: developUrl + '/asdh5/message/page', // 分页查询消息
technical: developUrl + '/mz/rec/technical', // 技工学生填写毕业证编号验证
chooseRoomRecs: developUrl + '/asdh5/graduate/chooseRoomRecs', // 技工学生填写毕业证编号验证
selectMzHouseTypesByApartMentId: developUrl + '/mz/housetype/selectMzHouseTypesByApartMentId', // 根据公寓id获取房型
cancelApply: developUrl + '/asdh5/renewal/cancelApply/', // 取消申请
deptQuery: developUrl + '/asdh5/dept/query', // 查询社区信息
roomQuery: developUrl + '/asdh5/room/query', // 根据单元查询房间信息
staticInfoByApartmentId: developUrl + '/mz/choose/staticInfoByApartmentIdSpecial', // 公寓统计列表
graduateInfoCollectionList: developUrl + '/mz/graduateInfoCollection/list', // 查询毕业生列表
graduateInfoCollection: developUrl + '/mz/graduateInfoCollection', // 新增
sm4Encryption: developUrl + '/asdh5/graduate/relayXLH', // SM4加密
//获取毕业生信息
graduateInfoCollectionNEW: developUrl + '/mz/graduateInfoCollection/getInfoByGraduateId',
// 7.8==========
getMessageCount: developUrl + '/asdh5/message/getMessageCount', //【h5】获取未读站内信的数量
// 查询毕业生是否可以选房
checkChooseRoomZG: developUrl + '/asdh5/chooseRoom/checkChooseRoomZG/', //111 查询毕业生是否可以选房
auditPage: developUrl + '/asdh5/audit/page', // 选房审核记录
registerSubmit: developUrl + '/asdh5/register/submit', //111就业创业提交选房
// 7.14
insertEmploymentMzChooseRoomRec: developUrl + '/asdh5/chooseRoom/insertEmploymentMzChooseRoomRec', // 就业创业新增选房记录
getSubmitMessage: developUrl + '/asdh5/message/getSubmitMessage', // 提交成功的站内信
// 7.19
cancelRegister: developUrl + '/asdh5/register/cancelRegister', // 取消登记
appointmentDetail: developUrl + '/chooseRoomRec/appointmentDetail', // 查询预约详情
checkInfoCollection: developUrl + '/mz/graduateInfoCollection/checkInfoCollection/', // 查询预约详情
sendVerificationCode: developUrl + '/asdh5/graduate/sendVerificationCode', // 验证码
mzAdviceAdd: developUrl + '/asdh5/mzAdvice/add', // 添加意见反馈
chooseRoomRecDetail: developUrl + '/asdh5/chooseRoom/chooseRoomRecDetail', // 【选房记录】详情
checkInRecDetail: developUrl + '/asdh5/chooseRoom/checkInRecDetail', //【入住记录】详情
getCheckInRecInfo: developUrl + '/asdh5/chooseRoom/getCheckInRecInfo', //【入住办理】毕业生入住记录回显
getRenewalRecordByChooseRecId: developUrl + '/asdh5/renewal/getRenewalRecordByChooseRecId/', // 查询选房记录的延租记录
checkOut: developUrl + '/asdh5/checkOut/page', // 退房记录
}
export default api

BIN
src/assets/images/changeRoomOkBac.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 KiB

BIN
src/assets/images/changeTime.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
src/assets/images/changeTimeBac.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

BIN
src/assets/images/changeTimeBac2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

BIN
src/assets/images/eyeClose.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 B

BIN
src/assets/images/eyeOpen.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 B

BIN
src/assets/images/resultBac.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

BIN
src/assets/images/shibai.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

952
src/assets/quill.bubble.css

@ -0,0 +1,952 @@
/*!
* Quill Editor v1.3.7
* https://quilljs.com/
* Copyright (c) 2014, Jason Chen
* Copyright (c) 2013, salesforce.com
*/
.ql-container {
box-sizing: border-box;
font-family: Helvetica, Arial, sans-serif;
font-size: 13px;
height: 100%;
margin: 0px;
position: relative;
}
.ql-container.ql-disabled .ql-tooltip {
visibility: hidden;
}
.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {
pointer-events: none;
}
.ql-clipboard {
left: -100000px;
height: 1px;
overflow-y: hidden;
position: absolute;
top: 50%;
}
.ql-clipboard p {
margin: 0;
padding: 0;
}
.ql-editor {
box-sizing: border-box;
line-height: 1.42;
height: 100%;
outline: none;
overflow-y: auto;
padding: 12px 15px;
tab-size: 4;
-moz-tab-size: 4;
text-align: left;
white-space: pre-wrap;
word-wrap: break-word;
}
.ql-editor > * {
cursor: text;
}
.ql-editor p,
.ql-editor ol,
.ql-editor ul,
.ql-editor pre,
.ql-editor blockquote,
.ql-editor h1,
.ql-editor h2,
.ql-editor h3,
.ql-editor h4,
.ql-editor h5,
.ql-editor h6 {
margin: 0;
padding: 0;
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol,
.ql-editor ul {
padding-left: 1.5em;
}
.ql-editor ol > li,
.ql-editor ul > li {
list-style-type: none;
}
.ql-editor ul > li::before {
content: '\2022';
}
.ql-editor ul[data-checked=true],
.ql-editor ul[data-checked=false] {
pointer-events: none;
}
.ql-editor ul[data-checked=true] > li *,
.ql-editor ul[data-checked=false] > li * {
pointer-events: all;
}
.ql-editor ul[data-checked=true] > li::before,
.ql-editor ul[data-checked=false] > li::before {
color: #777;
cursor: pointer;
pointer-events: all;
}
.ql-editor ul[data-checked=true] > li::before {
content: '\2611';
}
.ql-editor ul[data-checked=false] > li::before {
content: '\2610';
}
.ql-editor li::before {
display: inline-block;
white-space: nowrap;
width: 1.2em;
}
.ql-editor li:not(.ql-direction-rtl)::before {
margin-left: -1.5em;
margin-right: 0.3em;
text-align: right;
}
.ql-editor li.ql-direction-rtl::before {
margin-left: 0.3em;
margin-right: -1.5em;
}
.ql-editor ol li:not(.ql-direction-rtl),
.ql-editor ul li:not(.ql-direction-rtl) {
padding-left: 1.5em;
}
.ql-editor ol li.ql-direction-rtl,
.ql-editor ul li.ql-direction-rtl {
padding-right: 1.5em;
}
.ql-editor ol li {
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
counter-increment: list-0;
}
.ql-editor ol li:before {
content: counter(list-0, decimal) '. ';
}
.ql-editor ol li.ql-indent-1 {
counter-increment: list-1;
}
.ql-editor ol li.ql-indent-1:before {
content: counter(list-1, lower-alpha) '. ';
}
.ql-editor ol li.ql-indent-1 {
counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-2 {
counter-increment: list-2;
}
.ql-editor ol li.ql-indent-2:before {
content: counter(list-2, lower-roman) '. ';
}
.ql-editor ol li.ql-indent-2 {
counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-3 {
counter-increment: list-3;
}
.ql-editor ol li.ql-indent-3:before {
content: counter(list-3, decimal) '. ';
}
.ql-editor ol li.ql-indent-3 {
counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-4 {
counter-increment: list-4;
}
.ql-editor ol li.ql-indent-4:before {
content: counter(list-4, lower-alpha) '. ';
}
.ql-editor ol li.ql-indent-4 {
counter-reset: list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-5 {
counter-increment: list-5;
}
.ql-editor ol li.ql-indent-5:before {
content: counter(list-5, lower-roman) '. ';
}
.ql-editor ol li.ql-indent-5 {
counter-reset: list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-6 {
counter-increment: list-6;
}
.ql-editor ol li.ql-indent-6:before {
content: counter(list-6, decimal) '. ';
}
.ql-editor ol li.ql-indent-6 {
counter-reset: list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-7 {
counter-increment: list-7;
}
.ql-editor ol li.ql-indent-7:before {
content: counter(list-7, lower-alpha) '. ';
}
.ql-editor ol li.ql-indent-7 {
counter-reset: list-8 list-9;
}
.ql-editor ol li.ql-indent-8 {
counter-increment: list-8;
}
.ql-editor ol li.ql-indent-8:before {
content: counter(list-8, lower-roman) '. ';
}
.ql-editor ol li.ql-indent-8 {
counter-reset: list-9;
}
.ql-editor ol li.ql-indent-9 {
counter-increment: list-9;
}
.ql-editor ol li.ql-indent-9:before {
content: counter(list-9, decimal) '. ';
}
.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
padding-left: 3em;
}
.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
padding-left: 4.5em;
}
.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
padding-right: 3em;
}
.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
padding-right: 4.5em;
}
.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
padding-left: 6em;
}
.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
padding-left: 7.5em;
}
.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
padding-right: 6em;
}
.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
padding-right: 7.5em;
}
.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
padding-left: 9em;
}
.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
padding-left: 10.5em;
}
.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
padding-right: 9em;
}
.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
padding-right: 10.5em;
}
.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
padding-left: 12em;
}
.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
padding-left: 13.5em;
}
.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
padding-right: 12em;
}
.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
padding-right: 13.5em;
}
.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
padding-left: 15em;
}
.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
padding-left: 16.5em;
}
.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
padding-right: 15em;
}
.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
padding-right: 16.5em;
}
.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
padding-left: 18em;
}
.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
padding-left: 19.5em;
}
.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
padding-right: 18em;
}
.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
padding-right: 19.5em;
}
.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
padding-left: 21em;
}
.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
padding-left: 22.5em;
}
.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
padding-right: 21em;
}
.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
padding-right: 22.5em;
}
.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
padding-left: 24em;
}
.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
padding-left: 25.5em;
}
.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
padding-right: 24em;
}
.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
padding-right: 25.5em;
}
.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
padding-left: 27em;
}
.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
padding-left: 28.5em;
}
.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
padding-right: 27em;
}
.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
padding-right: 28.5em;
}
.ql-editor .ql-video {
display: block;
max-width: 100%;
}
.ql-editor .ql-video.ql-align-center {
margin: 0 auto;
}
.ql-editor .ql-video.ql-align-right {
margin: 0 0 0 auto;
}
.ql-editor .ql-bg-black {
background-color: #000;
}
.ql-editor .ql-bg-red {
background-color: #e60000;
}
.ql-editor .ql-bg-orange {
background-color: #f90;
}
.ql-editor .ql-bg-yellow {
background-color: #ff0;
}
.ql-editor .ql-bg-green {
background-color: #008a00;
}
.ql-editor .ql-bg-blue {
background-color: #06c;
}
.ql-editor .ql-bg-purple {
background-color: #93f;
}
.ql-editor .ql-color-white {
color: #fff;
}
.ql-editor .ql-color-red {
color: #e60000;
}
.ql-editor .ql-color-orange {
color: #f90;
}
.ql-editor .ql-color-yellow {
color: #ff0;
}
.ql-editor .ql-color-green {
color: #008a00;
}
.ql-editor .ql-color-blue {
color: #06c;
}
.ql-editor .ql-color-purple {
color: #93f;
}
.ql-editor .ql-font-serif {
font-family: Georgia, Times New Roman, serif;
}
.ql-editor .ql-font-monospace {
font-family: Monaco, Courier New, monospace;
}
.ql-editor .ql-size-small {
font-size: 0.75em;
}
.ql-editor .ql-size-large {
font-size: 1.5em;
}
.ql-editor .ql-size-huge {
font-size: 2.5em;
}
.ql-editor .ql-direction-rtl {
direction: rtl;
text-align: inherit;
}
.ql-editor .ql-align-center {
text-align: center;
}
.ql-editor .ql-align-justify {
text-align: justify;
}
.ql-editor .ql-align-right {
text-align: right;
}
.ql-editor.ql-blank::before {
color: rgba(0,0,0,0.6);
content: attr(data-placeholder);
font-style: italic;
left: 15px;
pointer-events: none;
position: absolute;
right: 15px;
}
.ql-bubble.ql-toolbar:after,
.ql-bubble .ql-toolbar:after {
clear: both;
content: '';
display: table;
}
.ql-bubble.ql-toolbar button,
.ql-bubble .ql-toolbar button {
background: none;
border: none;
cursor: pointer;
display: inline-block;
float: left;
height: 24px;
padding: 3px 5px;
width: 28px;
}
.ql-bubble.ql-toolbar button svg,
.ql-bubble .ql-toolbar button svg {
float: left;
height: 100%;
}
.ql-bubble.ql-toolbar button:active:hover,
.ql-bubble .ql-toolbar button:active:hover {
outline: none;
}
.ql-bubble.ql-toolbar input.ql-image[type=file],
.ql-bubble .ql-toolbar input.ql-image[type=file] {
display: none;
}
.ql-bubble.ql-toolbar button:hover,
.ql-bubble .ql-toolbar button:hover,
.ql-bubble.ql-toolbar button:focus,
.ql-bubble .ql-toolbar button:focus,
.ql-bubble.ql-toolbar button.ql-active,
.ql-bubble .ql-toolbar button.ql-active,
.ql-bubble.ql-toolbar .ql-picker-label:hover,
.ql-bubble .ql-toolbar .ql-picker-label:hover,
.ql-bubble.ql-toolbar .ql-picker-label.ql-active,
.ql-bubble .ql-toolbar .ql-picker-label.ql-active,
.ql-bubble.ql-toolbar .ql-picker-item:hover,
.ql-bubble .ql-toolbar .ql-picker-item:hover,
.ql-bubble.ql-toolbar .ql-picker-item.ql-selected,
.ql-bubble .ql-toolbar .ql-picker-item.ql-selected {
color: #fff;
}
.ql-bubble.ql-toolbar button:hover .ql-fill,
.ql-bubble .ql-toolbar button:hover .ql-fill,
.ql-bubble.ql-toolbar button:focus .ql-fill,
.ql-bubble .ql-toolbar button:focus .ql-fill,
.ql-bubble.ql-toolbar button.ql-active .ql-fill,
.ql-bubble .ql-toolbar button.ql-active .ql-fill,
.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill,
.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill,
.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill,
.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill,
.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill,
.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill,
.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill,
.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill,
.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill,
.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill,
.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill,
.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill,
.ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill,
.ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill,
.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,
.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill {
fill: #fff;
}
.ql-bubble.ql-toolbar button:hover .ql-stroke,
.ql-bubble .ql-toolbar button:hover .ql-stroke,
.ql-bubble.ql-toolbar button:focus .ql-stroke,
.ql-bubble .ql-toolbar button:focus .ql-stroke,
.ql-bubble.ql-toolbar button.ql-active .ql-stroke,
.ql-bubble .ql-toolbar button.ql-active .ql-stroke,
.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke,
.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke,
.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke,
.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke,
.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke,
.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke,
.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
.ql-bubble.ql-toolbar button:hover .ql-stroke-miter,
.ql-bubble .ql-toolbar button:hover .ql-stroke-miter,
.ql-bubble.ql-toolbar button:focus .ql-stroke-miter,
.ql-bubble .ql-toolbar button:focus .ql-stroke-miter,
.ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter,
.ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter,
.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,
.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter {
stroke: #fff;
}
@media (pointer: coarse) {
.ql-bubble.ql-toolbar button:hover:not(.ql-active),
.ql-bubble .ql-toolbar button:hover:not(.ql-active) {
color: #ccc;
}
.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill,
.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill,
.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,
.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill {
fill: #ccc;
}
.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke,
.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke,
.ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,
.ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter {
stroke: #ccc;
}
}
.ql-bubble {
box-sizing: border-box;
}
.ql-bubble * {
box-sizing: border-box;
}
.ql-bubble .ql-hidden {
display: none;
}
.ql-bubble .ql-out-bottom,
.ql-bubble .ql-out-top {
visibility: hidden;
}
.ql-bubble .ql-tooltip {
position: absolute;
transform: translateY(10px);
}
.ql-bubble .ql-tooltip a {
cursor: pointer;
text-decoration: none;
}
.ql-bubble .ql-tooltip.ql-flip {
transform: translateY(-10px);
}
.ql-bubble .ql-formats {
display: inline-block;
vertical-align: middle;
}
.ql-bubble .ql-formats:after {
clear: both;
content: '';
display: table;
}
.ql-bubble .ql-stroke {
fill: none;
stroke: #ccc;
stroke-linecap: round;
stroke-linejoin: round;
stroke-width: 2;
}
.ql-bubble .ql-stroke-miter {
fill: none;
stroke: #ccc;
stroke-miterlimit: 10;
stroke-width: 2;
}
.ql-bubble .ql-fill,
.ql-bubble .ql-stroke.ql-fill {
fill: #ccc;
}
.ql-bubble .ql-empty {
fill: none;
}
.ql-bubble .ql-even {
fill-rule: evenodd;
}
.ql-bubble .ql-thin,
.ql-bubble .ql-stroke.ql-thin {
stroke-width: 1;
}
.ql-bubble .ql-transparent {
opacity: 0.4;
}
.ql-bubble .ql-direction svg:last-child {
display: none;
}
.ql-bubble .ql-direction.ql-active svg:last-child {
display: inline;
}
.ql-bubble .ql-direction.ql-active svg:first-child {
display: none;
}
.ql-bubble .ql-editor h1 {
font-size: 2em;
}
.ql-bubble .ql-editor h2 {
font-size: 1.5em;
}
.ql-bubble .ql-editor h3 {
font-size: 1.17em;
}
.ql-bubble .ql-editor h4 {
font-size: 1em;
}
.ql-bubble .ql-editor h5 {
font-size: 0.83em;
}
.ql-bubble .ql-editor h6 {
font-size: 0.67em;
}
.ql-bubble .ql-editor a {
text-decoration: underline;
}
.ql-bubble .ql-editor blockquote {
border-left: 4px solid #ccc;
margin-bottom: 5px;
margin-top: 5px;
padding-left: 16px;
}
.ql-bubble .ql-editor code,
.ql-bubble .ql-editor pre {
background-color: #f0f0f0;
border-radius: 3px;
}
.ql-bubble .ql-editor pre {
white-space: pre-wrap;
margin-bottom: 5px;
margin-top: 5px;
padding: 5px 10px;
}
.ql-bubble .ql-editor code {
font-size: 85%;
padding: 2px 4px;
}
.ql-bubble .ql-editor pre.ql-syntax {
background-color: #23241f;
color: #f8f8f2;
overflow: visible;
}
.ql-bubble .ql-editor img {
max-width: 100%;
}
.ql-bubble .ql-picker {
color: #ccc;
display: inline-block;
float: left;
font-size: 14px;
font-weight: 500;
height: 24px;
position: relative;
vertical-align: middle;
}
.ql-bubble .ql-picker-label {
cursor: pointer;
display: inline-block;
height: 100%;
padding-left: 8px;
padding-right: 2px;
position: relative;
width: 100%;
}
.ql-bubble .ql-picker-label::before {
display: inline-block;
line-height: 22px;
}
.ql-bubble .ql-picker-options {
background-color: #444;
display: none;
min-width: 100%;
padding: 4px 8px;
position: absolute;
white-space: nowrap;
}
.ql-bubble .ql-picker-options .ql-picker-item {
cursor: pointer;
display: block;
padding-bottom: 5px;
padding-top: 5px;
}
.ql-bubble .ql-picker.ql-expanded .ql-picker-label {
color: #777;
z-index: 2;
}
.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill {
fill: #777;
}
.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke {
stroke: #777;
}
.ql-bubble .ql-picker.ql-expanded .ql-picker-options {
display: block;
margin-top: -1px;
top: 100%;
z-index: 1;
}
.ql-bubble .ql-color-picker,
.ql-bubble .ql-icon-picker {
width: 28px;
}
.ql-bubble .ql-color-picker .ql-picker-label,
.ql-bubble .ql-icon-picker .ql-picker-label {
padding: 2px 4px;
}
.ql-bubble .ql-color-picker .ql-picker-label svg,
.ql-bubble .ql-icon-picker .ql-picker-label svg {
right: 4px;
}
.ql-bubble .ql-icon-picker .ql-picker-options {
padding: 4px 0px;
}
.ql-bubble .ql-icon-picker .ql-picker-item {
height: 24px;
width: 24px;
padding: 2px 4px;
}
.ql-bubble .ql-color-picker .ql-picker-options {
padding: 3px 5px;
width: 152px;
}
.ql-bubble .ql-color-picker .ql-picker-item {
border: 1px solid transparent;
float: left;
height: 16px;
margin: 2px;
padding: 0px;
width: 16px;
}
.ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg {
position: absolute;
margin-top: -9px;
right: 0;
top: 50%;
width: 18px;
}
.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,
.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,
.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before,
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,
.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,
.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before {
content: attr(data-label);
}
.ql-bubble .ql-picker.ql-header {
width: 98px;
}
.ql-bubble .ql-picker.ql-header .ql-picker-label::before,
.ql-bubble .ql-picker.ql-header .ql-picker-item::before {
content: 'Normal';
}
.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
content: 'Heading 1';
}
.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
content: 'Heading 2';
}
.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
content: 'Heading 3';
}
.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
content: 'Heading 4';
}
.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
content: 'Heading 5';
}
.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
content: 'Heading 6';
}
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
font-size: 2em;
}
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
font-size: 1.5em;
}
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
font-size: 1.17em;
}
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
font-size: 1em;
}
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
font-size: 0.83em;
}
.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
font-size: 0.67em;
}
.ql-bubble .ql-picker.ql-font {
width: 108px;
}
.ql-bubble .ql-picker.ql-font .ql-picker-label::before,
.ql-bubble .ql-picker.ql-font .ql-picker-item::before {
content: 'Sans Serif';
}
.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
content: 'Serif';
}
.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
content: 'Monospace';
}
.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
font-family: Georgia, Times New Roman, serif;
}
.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
font-family: Monaco, Courier New, monospace;
}
.ql-bubble .ql-picker.ql-size {
width: 98px;
}
.ql-bubble .ql-picker.ql-size .ql-picker-label::before,
.ql-bubble .ql-picker.ql-size .ql-picker-item::before {
content: 'Normal';
}
.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]::before,
.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
content: 'Small';
}
.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]::before,
.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
content: 'Large';
}
.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,
.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
content: 'Huge';
}
.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
font-size: 10px;
}
.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
font-size: 18px;
}
.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
font-size: 32px;
}
.ql-bubble .ql-color-picker.ql-background .ql-picker-item {
background-color: #fff;
}
.ql-bubble .ql-color-picker.ql-color .ql-picker-item {
background-color: #000;
}
.ql-bubble .ql-toolbar .ql-formats {
margin: 8px 12px 8px 0px;
}
.ql-bubble .ql-toolbar .ql-formats:first-child {
margin-left: 12px;
}
.ql-bubble .ql-color-picker svg {
margin: 1px;
}
.ql-bubble .ql-color-picker .ql-picker-item.ql-selected,
.ql-bubble .ql-color-picker .ql-picker-item:hover {
border-color: #fff;
}
.ql-bubble .ql-tooltip {
background-color: #444;
border-radius: 25px;
color: #fff;
}
.ql-bubble .ql-tooltip-arrow {
border-left: 6px solid transparent;
border-right: 6px solid transparent;
content: " ";
display: block;
left: 50%;
margin-left: -6px;
position: absolute;
}
.ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow {
border-bottom: 6px solid #444;
top: -6px;
}
.ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow {
border-top: 6px solid #444;
bottom: -6px;
}
.ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor {
display: block;
}
.ql-bubble .ql-tooltip.ql-editing .ql-formats {
visibility: hidden;
}
.ql-bubble .ql-tooltip-editor {
display: none;
}
.ql-bubble .ql-tooltip-editor input[type=text] {
background: transparent;
border: none;
color: #fff;
font-size: 13px;
height: 100%;
outline: none;
padding: 10px 20px;
position: absolute;
width: 100%;
}
.ql-bubble .ql-tooltip-editor a {
top: 10px;
position: absolute;
right: 20px;
}
.ql-bubble .ql-tooltip-editor a:before {
color: #ccc;
content: "\D7";
font-size: 16px;
font-weight: bold;
}
.ql-container.ql-bubble:not(.ql-disabled) a {
position: relative;
white-space: nowrap;
}
.ql-container.ql-bubble:not(.ql-disabled) a::before {
background-color: #444;
border-radius: 15px;
top: -5px;
font-size: 12px;
color: #fff;
content: attr(href);
font-weight: normal;
overflow: hidden;
padding: 5px 15px;
text-decoration: none;
z-index: 1;
}
.ql-container.ql-bubble:not(.ql-disabled) a::after {
border-top: 6px solid #444;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
top: 0;
content: " ";
height: 0;
width: 0;
}
.ql-container.ql-bubble:not(.ql-disabled) a::before,
.ql-container.ql-bubble:not(.ql-disabled) a::after {
left: 0;
margin-left: 50%;
position: absolute;
transform: translate(-50%, -100%);
transition: visibility 0s ease 200ms;
visibility: hidden;
}
.ql-container.ql-bubble:not(.ql-disabled) a:hover::before,
.ql-container.ql-bubble:not(.ql-disabled) a:hover::after {
visibility: visible;
}

397
src/assets/quill.core.css

@ -0,0 +1,397 @@
/*!
* Quill Editor v1.3.7
* https://quilljs.com/
* Copyright (c) 2014, Jason Chen
* Copyright (c) 2013, salesforce.com
*/
.ql-container {
box-sizing: border-box;
font-family: Helvetica, Arial, sans-serif;
font-size: 13px;
height: 100%;
margin: 0px;
position: relative;
}
.ql-container.ql-disabled .ql-tooltip {
visibility: hidden;
}
.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {
pointer-events: none;
}
.ql-clipboard {
left: -100000px;
height: 1px;
overflow-y: hidden;
position: absolute;
top: 50%;
}
.ql-clipboard p {
margin: 0;
padding: 0;
}
.ql-editor {
box-sizing: border-box;
line-height: 1.42;
height: 100%;
outline: none;
overflow-y: auto;
padding: 12px 15px;
tab-size: 4;
-moz-tab-size: 4;
text-align: left;
white-space: pre-wrap;
word-wrap: break-word;
}
.ql-editor > * {
cursor: text;
}
.ql-editor p,
.ql-editor ol,
.ql-editor ul,
.ql-editor pre,
.ql-editor blockquote,
.ql-editor h1,
.ql-editor h2,
.ql-editor h3,
.ql-editor h4,
.ql-editor h5,
.ql-editor h6 {
margin: 0;
padding: 0;
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol,
.ql-editor ul {
padding-left: 1.5em;
}
.ql-editor ol > li,
.ql-editor ul > li {
list-style-type: none;
}
.ql-editor ul > li::before {
content: '\2022';
}
.ql-editor ul[data-checked=true],
.ql-editor ul[data-checked=false] {
pointer-events: none;
}
.ql-editor ul[data-checked=true] > li *,
.ql-editor ul[data-checked=false] > li * {
pointer-events: all;
}
.ql-editor ul[data-checked=true] > li::before,
.ql-editor ul[data-checked=false] > li::before {
color: #777;
cursor: pointer;
pointer-events: all;
}
.ql-editor ul[data-checked=true] > li::before {
content: '\2611';
}
.ql-editor ul[data-checked=false] > li::before {
content: '\2610';
}
.ql-editor li::before {
display: inline-block;
white-space: nowrap;
width: 1.2em;
}
.ql-editor li:not(.ql-direction-rtl)::before {
margin-left: -1.5em;
margin-right: 0.3em;
text-align: right;
}
.ql-editor li.ql-direction-rtl::before {
margin-left: 0.3em;
margin-right: -1.5em;
}
.ql-editor ol li:not(.ql-direction-rtl),
.ql-editor ul li:not(.ql-direction-rtl) {
padding-left: 1.5em;
}
.ql-editor ol li.ql-direction-rtl,
.ql-editor ul li.ql-direction-rtl {
padding-right: 1.5em;
}
.ql-editor ol li {
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
counter-increment: list-0;
}
.ql-editor ol li:before {
content: counter(list-0, decimal) '. ';
}
.ql-editor ol li.ql-indent-1 {
counter-increment: list-1;
}
.ql-editor ol li.ql-indent-1:before {
content: counter(list-1, lower-alpha) '. ';
}
.ql-editor ol li.ql-indent-1 {
counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-2 {
counter-increment: list-2;
}
.ql-editor ol li.ql-indent-2:before {
content: counter(list-2, lower-roman) '. ';
}
.ql-editor ol li.ql-indent-2 {
counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-3 {
counter-increment: list-3;
}
.ql-editor ol li.ql-indent-3:before {
content: counter(list-3, decimal) '. ';
}
.ql-editor ol li.ql-indent-3 {
counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-4 {
counter-increment: list-4;
}
.ql-editor ol li.ql-indent-4:before {
content: counter(list-4, lower-alpha) '. ';
}
.ql-editor ol li.ql-indent-4 {
counter-reset: list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-5 {
counter-increment: list-5;
}
.ql-editor ol li.ql-indent-5:before {
content: counter(list-5, lower-roman) '. ';
}
.ql-editor ol li.ql-indent-5 {
counter-reset: list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-6 {
counter-increment: list-6;
}
.ql-editor ol li.ql-indent-6:before {
content: counter(list-6, decimal) '. ';
}
.ql-editor ol li.ql-indent-6 {
counter-reset: list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-7 {
counter-increment: list-7;
}
.ql-editor ol li.ql-indent-7:before {
content: counter(list-7, lower-alpha) '. ';
}
.ql-editor ol li.ql-indent-7 {
counter-reset: list-8 list-9;
}
.ql-editor ol li.ql-indent-8 {
counter-increment: list-8;
}
.ql-editor ol li.ql-indent-8:before {
content: counter(list-8, lower-roman) '. ';
}
.ql-editor ol li.ql-indent-8 {
counter-reset: list-9;
}
.ql-editor ol li.ql-indent-9 {
counter-increment: list-9;
}
.ql-editor ol li.ql-indent-9:before {
content: counter(list-9, decimal) '. ';
}
.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
padding-left: 3em;
}
.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
padding-left: 4.5em;
}
.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
padding-right: 3em;
}
.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
padding-right: 4.5em;
}
.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
padding-left: 6em;
}
.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
padding-left: 7.5em;
}
.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
padding-right: 6em;
}
.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
padding-right: 7.5em;
}
.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
padding-left: 9em;
}
.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
padding-left: 10.5em;
}
.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
padding-right: 9em;
}
.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
padding-right: 10.5em;
}
.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
padding-left: 12em;
}
.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
padding-left: 13.5em;
}
.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
padding-right: 12em;
}
.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
padding-right: 13.5em;
}
.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
padding-left: 15em;
}
.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
padding-left: 16.5em;
}
.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
padding-right: 15em;
}
.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
padding-right: 16.5em;
}
.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
padding-left: 18em;
}
.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
padding-left: 19.5em;
}
.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
padding-right: 18em;
}
.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
padding-right: 19.5em;
}
.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
padding-left: 21em;
}
.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
padding-left: 22.5em;
}
.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
padding-right: 21em;
}
.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
padding-right: 22.5em;
}
.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
padding-left: 24em;
}
.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
padding-left: 25.5em;
}
.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
padding-right: 24em;
}
.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
padding-right: 25.5em;
}
.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
padding-left: 27em;
}
.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
padding-left: 28.5em;
}
.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
padding-right: 27em;
}
.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
padding-right: 28.5em;
}
.ql-editor .ql-video {
display: block;
max-width: 100%;
}
.ql-editor .ql-video.ql-align-center {
margin: 0 auto;
}
.ql-editor .ql-video.ql-align-right {
margin: 0 0 0 auto;
}
.ql-editor .ql-bg-black {
background-color: #000;
}
.ql-editor .ql-bg-red {
background-color: #e60000;
}
.ql-editor .ql-bg-orange {
background-color: #f90;
}
.ql-editor .ql-bg-yellow {
background-color: #ff0;
}
.ql-editor .ql-bg-green {
background-color: #008a00;
}
.ql-editor .ql-bg-blue {
background-color: #06c;
}
.ql-editor .ql-bg-purple {
background-color: #93f;
}
.ql-editor .ql-color-white {
color: #fff;
}
.ql-editor .ql-color-red {
color: #e60000;
}
.ql-editor .ql-color-orange {
color: #f90;
}
.ql-editor .ql-color-yellow {
color: #ff0;
}
.ql-editor .ql-color-green {
color: #008a00;
}
.ql-editor .ql-color-blue {
color: #06c;
}
.ql-editor .ql-color-purple {
color: #93f;
}
.ql-editor .ql-font-serif {
font-family: Georgia, Times New Roman, serif;
}
.ql-editor .ql-font-monospace {
font-family: Monaco, Courier New, monospace;
}
.ql-editor .ql-size-small {
font-size: 0.75em;
}
.ql-editor .ql-size-large {
font-size: 1.5em;
}
.ql-editor .ql-size-huge {
font-size: 2.5em;
}
.ql-editor .ql-direction-rtl {
direction: rtl;
text-align: inherit;
}
.ql-editor .ql-align-center {
text-align: center;
}
.ql-editor .ql-align-justify {
text-align: justify;
}
.ql-editor .ql-align-right {
text-align: right;
}
.ql-editor.ql-blank::before {
color: rgba(0,0,0,0.6);
content: attr(data-placeholder);
font-style: italic;
left: 15px;
pointer-events: none;
position: absolute;
right: 15px;
}

945
src/assets/quill.snow.css

@ -0,0 +1,945 @@
/*!
* Quill Editor v1.3.7
* https://quilljs.com/
* Copyright (c) 2014, Jason Chen
* Copyright (c) 2013, salesforce.com
*/
.ql-container {
box-sizing: border-box;
font-family: Helvetica, Arial, sans-serif;
font-size: 13px;
height: 100%;
margin: 0px;
position: relative;
}
.ql-container.ql-disabled .ql-tooltip {
visibility: hidden;
}
.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {
pointer-events: none;
}
.ql-clipboard {
left: -100000px;
height: 1px;
overflow-y: hidden;
position: absolute;
top: 50%;
}
.ql-clipboard p {
margin: 0;
padding: 0;
}
.ql-editor {
box-sizing: border-box;
line-height: 1.42;
height: 100%;
outline: none;
overflow-y: auto;
padding: 12px 15px;
tab-size: 4;
-moz-tab-size: 4;
text-align: left;
white-space: pre-wrap;
word-wrap: break-word;
}
.ql-editor > * {
cursor: text;
}
.ql-editor p,
.ql-editor ol,
.ql-editor ul,
.ql-editor pre,
.ql-editor blockquote,
.ql-editor h1,
.ql-editor h2,
.ql-editor h3,
.ql-editor h4,
.ql-editor h5,
.ql-editor h6 {
margin: 0;
padding: 0;
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol,
.ql-editor ul {
padding-left: 1.5em;
}
.ql-editor ol > li,
.ql-editor ul > li {
list-style-type: none;
}
.ql-editor ul > li::before {
content: '\2022';
}
.ql-editor ul[data-checked=true],
.ql-editor ul[data-checked=false] {
pointer-events: none;
}
.ql-editor ul[data-checked=true] > li *,
.ql-editor ul[data-checked=false] > li * {
pointer-events: all;
}
.ql-editor ul[data-checked=true] > li::before,
.ql-editor ul[data-checked=false] > li::before {
color: #777;
cursor: pointer;
pointer-events: all;
}
.ql-editor ul[data-checked=true] > li::before {
content: '\2611';
}
.ql-editor ul[data-checked=false] > li::before {
content: '\2610';
}
.ql-editor li::before {
display: inline-block;
white-space: nowrap;
width: 1.2em;
}
.ql-editor li:not(.ql-direction-rtl)::before {
margin-left: -1.5em;
margin-right: 0.3em;
text-align: right;
}
.ql-editor li.ql-direction-rtl::before {
margin-left: 0.3em;
margin-right: -1.5em;
}
.ql-editor ol li:not(.ql-direction-rtl),
.ql-editor ul li:not(.ql-direction-rtl) {
padding-left: 1.5em;
}
.ql-editor ol li.ql-direction-rtl,
.ql-editor ul li.ql-direction-rtl {
padding-right: 1.5em;
}
.ql-editor ol li {
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
counter-increment: list-0;
}
.ql-editor ol li:before {
content: counter(list-0, decimal) '. ';
}
.ql-editor ol li.ql-indent-1 {
counter-increment: list-1;
}
.ql-editor ol li.ql-indent-1:before {
content: counter(list-1, lower-alpha) '. ';
}
.ql-editor ol li.ql-indent-1 {
counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-2 {
counter-increment: list-2;
}
.ql-editor ol li.ql-indent-2:before {
content: counter(list-2, lower-roman) '. ';
}
.ql-editor ol li.ql-indent-2 {
counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-3 {
counter-increment: list-3;
}
.ql-editor ol li.ql-indent-3:before {
content: counter(list-3, decimal) '. ';
}
.ql-editor ol li.ql-indent-3 {
counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-4 {
counter-increment: list-4;
}
.ql-editor ol li.ql-indent-4:before {
content: counter(list-4, lower-alpha) '. ';
}
.ql-editor ol li.ql-indent-4 {
counter-reset: list-5 list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-5 {
counter-increment: list-5;
}
.ql-editor ol li.ql-indent-5:before {
content: counter(list-5, lower-roman) '. ';
}
.ql-editor ol li.ql-indent-5 {
counter-reset: list-6 list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-6 {
counter-increment: list-6;
}
.ql-editor ol li.ql-indent-6:before {
content: counter(list-6, decimal) '. ';
}
.ql-editor ol li.ql-indent-6 {
counter-reset: list-7 list-8 list-9;
}
.ql-editor ol li.ql-indent-7 {
counter-increment: list-7;
}
.ql-editor ol li.ql-indent-7:before {
content: counter(list-7, lower-alpha) '. ';
}
.ql-editor ol li.ql-indent-7 {
counter-reset: list-8 list-9;
}
.ql-editor ol li.ql-indent-8 {
counter-increment: list-8;
}
.ql-editor ol li.ql-indent-8:before {
content: counter(list-8, lower-roman) '. ';
}
.ql-editor ol li.ql-indent-8 {
counter-reset: list-9;
}
.ql-editor ol li.ql-indent-9 {
counter-increment: list-9;
}
.ql-editor ol li.ql-indent-9:before {
content: counter(list-9, decimal) '. ';
}
.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
padding-left: 3em;
}
.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
padding-left: 4.5em;
}
.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
padding-right: 3em;
}
.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
padding-right: 4.5em;
}
.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
padding-left: 6em;
}
.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
padding-left: 7.5em;
}
.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
padding-right: 6em;
}
.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
padding-right: 7.5em;
}
.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
padding-left: 9em;
}
.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
padding-left: 10.5em;
}
.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
padding-right: 9em;
}
.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
padding-right: 10.5em;
}
.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
padding-left: 12em;
}
.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
padding-left: 13.5em;
}
.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
padding-right: 12em;
}
.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
padding-right: 13.5em;
}
.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
padding-left: 15em;
}
.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
padding-left: 16.5em;
}
.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
padding-right: 15em;
}
.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
padding-right: 16.5em;
}
.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
padding-left: 18em;
}
.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
padding-left: 19.5em;
}
.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
padding-right: 18em;
}
.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
padding-right: 19.5em;
}
.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
padding-left: 21em;
}
.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
padding-left: 22.5em;
}
.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
padding-right: 21em;
}
.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
padding-right: 22.5em;
}
.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
padding-left: 24em;
}
.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
padding-left: 25.5em;
}
.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
padding-right: 24em;
}
.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
padding-right: 25.5em;
}
.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
padding-left: 27em;
}
.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
padding-left: 28.5em;
}
.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
padding-right: 27em;
}
.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
padding-right: 28.5em;
}
.ql-editor .ql-video {
display: block;
max-width: 100%;
}
.ql-editor .ql-video.ql-align-center {
margin: 0 auto;
}
.ql-editor .ql-video.ql-align-right {
margin: 0 0 0 auto;
}
.ql-editor .ql-bg-black {
background-color: #000;
}
.ql-editor .ql-bg-red {
background-color: #e60000;
}
.ql-editor .ql-bg-orange {
background-color: #f90;
}
.ql-editor .ql-bg-yellow {
background-color: #ff0;
}
.ql-editor .ql-bg-green {
background-color: #008a00;
}
.ql-editor .ql-bg-blue {
background-color: #06c;
}
.ql-editor .ql-bg-purple {
background-color: #93f;
}
.ql-editor .ql-color-white {
color: #fff;
}
.ql-editor .ql-color-red {
color: #e60000;
}
.ql-editor .ql-color-orange {
color: #f90;
}
.ql-editor .ql-color-yellow {
color: #ff0;
}
.ql-editor .ql-color-green {
color: #008a00;
}
.ql-editor .ql-color-blue {
color: #06c;
}
.ql-editor .ql-color-purple {
color: #93f;
}
.ql-editor .ql-font-serif {
font-family: Georgia, Times New Roman, serif;
}
.ql-editor .ql-font-monospace {
font-family: Monaco, Courier New, monospace;
}
.ql-editor .ql-size-small {
font-size: 0.75em;
}
.ql-editor .ql-size-large {
font-size: 1.5em;
}
.ql-editor .ql-size-huge {
font-size: 2.5em;
}
.ql-editor .ql-direction-rtl {
direction: rtl;
text-align: inherit;
}
.ql-editor .ql-align-center {
text-align: center;
}
.ql-editor .ql-align-justify {
text-align: justify;
}
.ql-editor .ql-align-right {
text-align: right;
}
.ql-editor.ql-blank::before {
color: rgba(0,0,0,0.6);
content: attr(data-placeholder);
font-style: italic;
left: 15px;
pointer-events: none;
position: absolute;
right: 15px;
}
.ql-snow.ql-toolbar:after,
.ql-snow .ql-toolbar:after {
clear: both;
content: '';
display: table;
}
.ql-snow.ql-toolbar button,
.ql-snow .ql-toolbar button {
background: none;
border: none;
cursor: pointer;
display: inline-block;
float: left;
height: 24px;
padding: 3px 5px;
width: 28px;
}
.ql-snow.ql-toolbar button svg,
.ql-snow .ql-toolbar button svg {
float: left;
height: 100%;
}
.ql-snow.ql-toolbar button:active:hover,
.ql-snow .ql-toolbar button:active:hover {
outline: none;
}
.ql-snow.ql-toolbar input.ql-image[type=file],
.ql-snow .ql-toolbar input.ql-image[type=file] {
display: none;
}
.ql-snow.ql-toolbar button:hover,
.ql-snow .ql-toolbar button:hover,
.ql-snow.ql-toolbar button:focus,
.ql-snow .ql-toolbar button:focus,
.ql-snow.ql-toolbar button.ql-active,
.ql-snow .ql-toolbar button.ql-active,
.ql-snow.ql-toolbar .ql-picker-label:hover,
.ql-snow .ql-toolbar .ql-picker-label:hover,
.ql-snow.ql-toolbar .ql-picker-label.ql-active,
.ql-snow .ql-toolbar .ql-picker-label.ql-active,
.ql-snow.ql-toolbar .ql-picker-item:hover,
.ql-snow .ql-toolbar .ql-picker-item:hover,
.ql-snow.ql-toolbar .ql-picker-item.ql-selected,
.ql-snow .ql-toolbar .ql-picker-item.ql-selected {
color: #06c;
}
.ql-snow.ql-toolbar button:hover .ql-fill,
.ql-snow .ql-toolbar button:hover .ql-fill,
.ql-snow.ql-toolbar button:focus .ql-fill,
.ql-snow .ql-toolbar button:focus .ql-fill,
.ql-snow.ql-toolbar button.ql-active .ql-fill,
.ql-snow .ql-toolbar button.ql-active .ql-fill,
.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,
.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,
.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,
.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,
.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,
.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,
.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,
.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,
.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,
.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,
.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill,
.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill,
.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,
.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,
.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,
.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill {
fill: #06c;
}
.ql-snow.ql-toolbar button:hover .ql-stroke,
.ql-snow .ql-toolbar button:hover .ql-stroke,
.ql-snow.ql-toolbar button:focus .ql-stroke,
.ql-snow .ql-toolbar button:focus .ql-stroke,
.ql-snow.ql-toolbar button.ql-active .ql-stroke,
.ql-snow .ql-toolbar button.ql-active .ql-stroke,
.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,
.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,
.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,
.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,
.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,
.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,
.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
.ql-snow.ql-toolbar button:hover .ql-stroke-miter,
.ql-snow .ql-toolbar button:hover .ql-stroke-miter,
.ql-snow.ql-toolbar button:focus .ql-stroke-miter,
.ql-snow .ql-toolbar button:focus .ql-stroke-miter,
.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,
.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,
.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,
.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter {
stroke: #06c;
}
@media (pointer: coarse) {
.ql-snow.ql-toolbar button:hover:not(.ql-active),
.ql-snow .ql-toolbar button:hover:not(.ql-active) {
color: #444;
}
.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill,
.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill,
.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,
.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill {
fill: #444;
}
.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke,
.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke,
.ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,
.ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter {
stroke: #444;
}
}
.ql-snow {
box-sizing: border-box;
}
.ql-snow * {
box-sizing: border-box;
}
.ql-snow .ql-hidden {
display: none;
}
.ql-snow .ql-out-bottom,
.ql-snow .ql-out-top {
visibility: hidden;
}
.ql-snow .ql-tooltip {
position: absolute;
transform: translateY(10px);
}
.ql-snow .ql-tooltip a {
cursor: pointer;
text-decoration: none;
}
.ql-snow .ql-tooltip.ql-flip {
transform: translateY(-10px);
}
.ql-snow .ql-formats {
display: inline-block;
vertical-align: middle;
}
.ql-snow .ql-formats:after {
clear: both;
content: '';
display: table;
}
.ql-snow .ql-stroke {
fill: none;
stroke: #444;
stroke-linecap: round;
stroke-linejoin: round;
stroke-width: 2;
}
.ql-snow .ql-stroke-miter {
fill: none;
stroke: #444;
stroke-miterlimit: 10;
stroke-width: 2;
}
.ql-snow .ql-fill,
.ql-snow .ql-stroke.ql-fill {
fill: #444;
}
.ql-snow .ql-empty {
fill: none;
}
.ql-snow .ql-even {
fill-rule: evenodd;
}
.ql-snow .ql-thin,
.ql-snow .ql-stroke.ql-thin {
stroke-width: 1;
}
.ql-snow .ql-transparent {
opacity: 0.4;
}
.ql-snow .ql-direction svg:last-child {
display: none;
}
.ql-snow .ql-direction.ql-active svg:last-child {
display: inline;
}
.ql-snow .ql-direction.ql-active svg:first-child {
display: none;
}
.ql-snow .ql-editor h1 {
font-size: 2em;
}
.ql-snow .ql-editor h2 {
font-size: 1.5em;
}
.ql-snow .ql-editor h3 {
font-size: 1.17em;
}
.ql-snow .ql-editor h4 {
font-size: 1em;
}
.ql-snow .ql-editor h5 {
font-size: 0.83em;
}
.ql-snow .ql-editor h6 {
font-size: 0.67em;
}
.ql-snow .ql-editor a {
text-decoration: underline;
}
.ql-snow .ql-editor blockquote {
border-left: 4px solid #ccc;
margin-bottom: 5px;
margin-top: 5px;
padding-left: 16px;
}
.ql-snow .ql-editor code,
.ql-snow .ql-editor pre {
background-color: #f0f0f0;
border-radius: 3px;
}
.ql-snow .ql-editor pre {
white-space: pre-wrap;
margin-bottom: 5px;
margin-top: 5px;
padding: 5px 10px;
}
.ql-snow .ql-editor code {
font-size: 85%;
padding: 2px 4px;
}
.ql-snow .ql-editor pre.ql-syntax {
background-color: #23241f;
color: #f8f8f2;
overflow: visible;
}
.ql-snow .ql-editor img {
max-width: 100%;
}
.ql-snow .ql-picker {
color: #444;
display: inline-block;
float: left;
font-size: 14px;
font-weight: 500;
height: 24px;
position: relative;
vertical-align: middle;
}
.ql-snow .ql-picker-label {
cursor: pointer;
display: inline-block;
height: 100%;
padding-left: 8px;
padding-right: 2px;
position: relative;
width: 100%;
}
.ql-snow .ql-picker-label::before {
display: inline-block;
line-height: 22px;
}
.ql-snow .ql-picker-options {
background-color: #fff;
display: none;
min-width: 100%;
padding: 4px 8px;
position: absolute;
white-space: nowrap;
}
.ql-snow .ql-picker-options .ql-picker-item {
cursor: pointer;
display: block;
padding-bottom: 5px;
padding-top: 5px;
}
.ql-snow .ql-picker.ql-expanded .ql-picker-label {
color: #ccc;
z-index: 2;
}
.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill {
fill: #ccc;
}
.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke {
stroke: #ccc;
}
.ql-snow .ql-picker.ql-expanded .ql-picker-options {
display: block;
margin-top: -1px;
top: 100%;
z-index: 1;
}
.ql-snow .ql-color-picker,
.ql-snow .ql-icon-picker {
width: 28px;
}
.ql-snow .ql-color-picker .ql-picker-label,
.ql-snow .ql-icon-picker .ql-picker-label {
padding: 2px 4px;
}
.ql-snow .ql-color-picker .ql-picker-label svg,
.ql-snow .ql-icon-picker .ql-picker-label svg {
right: 4px;
}
.ql-snow .ql-icon-picker .ql-picker-options {
padding: 4px 0px;
}
.ql-snow .ql-icon-picker .ql-picker-item {
height: 24px;
width: 24px;
padding: 2px 4px;
}
.ql-snow .ql-color-picker .ql-picker-options {
padding: 3px 5px;
width: 152px;
}
.ql-snow .ql-color-picker .ql-picker-item {
border: 1px solid transparent;
float: left;
height: 16px;
margin: 2px;
padding: 0px;
width: 16px;
}
.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg {
position: absolute;
margin-top: -9px;
right: 0;
top: 50%;
width: 18px;
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,
.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,
.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before {
content: attr(data-label);
}
.ql-snow .ql-picker.ql-header {
width: 98px;
}
.ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
content: 'Normal';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
content: 'Heading 1';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
content: 'Heading 2';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
content: 'Heading 3';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
content: 'Heading 4';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
content: 'Heading 5';
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
content: 'Heading 6';
}
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
font-size: 2em;
}
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
font-size: 1.5em;
}
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
font-size: 1.17em;
}
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
font-size: 1em;
}
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
font-size: 0.83em;
}
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
font-size: 0.67em;
}
.ql-snow .ql-picker.ql-font {
width: 108px;
}
.ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
content: 'Sans Serif';
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
content: 'Serif';
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
content: 'Monospace';
}
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
font-family: Georgia, Times New Roman, serif;
}
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
font-family: Monaco, Courier New, monospace;
}
.ql-snow .ql-picker.ql-size {
width: 98px;
}
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
content: 'Normal';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
content: 'Small';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
content: 'Large';
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
content: 'Huge';
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before {
font-size: 10px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before {
font-size: 18px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before {
font-size: 32px;
}
.ql-snow .ql-color-picker.ql-background .ql-picker-item {
background-color: #fff;
}
.ql-snow .ql-color-picker.ql-color .ql-picker-item {
background-color: #000;
}
.ql-toolbar.ql-snow {
border: 1px solid #ccc;
box-sizing: border-box;
font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
padding: 8px;
}
.ql-toolbar.ql-snow .ql-formats {
margin-right: 15px;
}
.ql-toolbar.ql-snow .ql-picker-label {
border: 1px solid transparent;
}
.ql-toolbar.ql-snow .ql-picker-options {
border: 1px solid transparent;
box-shadow: rgba(0,0,0,0.2) 0 2px 8px;
}
.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label {
border-color: #ccc;
}
.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
border-color: #ccc;
}
.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,
.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover {
border-color: #000;
}
.ql-toolbar.ql-snow + .ql-container.ql-snow {
border-top: 0px;
}
.ql-snow .ql-tooltip {
background-color: #fff;
border: 1px solid #ccc;
box-shadow: 0px 0px 5px #ddd;
color: #444;
padding: 5px 12px;
white-space: nowrap;
}
.ql-snow .ql-tooltip::before {
content: "Visit URL:";
line-height: 26px;
margin-right: 8px;
}
.ql-snow .ql-tooltip input[type=text] {
display: none;
border: 1px solid #ccc;
font-size: 13px;
height: 26px;
margin: 0px;
padding: 3px 5px;
width: 170px;
}
.ql-snow .ql-tooltip a.ql-preview {
display: inline-block;
max-width: 200px;
overflow-x: hidden;
text-overflow: ellipsis;
vertical-align: top;
}
.ql-snow .ql-tooltip a.ql-action::after {
border-right: 1px solid #ccc;
content: 'Edit';
margin-left: 16px;
padding-right: 8px;
}
.ql-snow .ql-tooltip a.ql-remove::before {
content: 'Remove';
margin-left: 8px;
}
.ql-snow .ql-tooltip a {
line-height: 26px;
}
.ql-snow .ql-tooltip.ql-editing a.ql-preview,
.ql-snow .ql-tooltip.ql-editing a.ql-remove {
display: none;
}
.ql-snow .ql-tooltip.ql-editing input[type=text] {
display: inline-block;
}
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0px;
content: 'Save';
padding-right: 0px;
}
.ql-snow .ql-tooltip[data-mode=link]::before {
content: "Enter link:";
}
.ql-snow .ql-tooltip[data-mode=formula]::before {
content: "Enter formula:";
}
.ql-snow .ql-tooltip[data-mode=video]::before {
content: "Enter video:";
}
.ql-snow a {
color: #06c;
}
.ql-container.ql-snow {
border: 1px solid #ccc;
}

9
src/components/AppHeader.vue

@ -115,11 +115,12 @@ const navigationConfig = [
name: '选房指南',
path: '',
key: 'guide'
}, {
name: '学历汇',
path: '',
key: 'renewal'
},
// {
// name: '',
// path: '',
// key: 'renewal'
// },
]
const currentLanguage = computed(() => locale.value)

2
src/components/ImagePreview.vue

@ -30,7 +30,7 @@
<el-button :icon="Close" circle @click="handleClose"/>
</div>
<div class="relative max-w-[90vw] max-h-[90vh] overflow-auto">
<div class="relative max-w-[1200px] max-h-[90vh] overflow-auto">
<!-- 图片容器 -->
<div class="relative">
<img

16
src/main.js

@ -1,4 +1,8 @@
import './assets/main.css'
// 引入 Quill 编辑器样式
import './assets/quill.core.css'
import './assets/quill.snow.css'
import './assets/quill.bubble.css'
import { createApp } from 'vue'
import App from './App.vue'
@ -6,11 +10,21 @@ import router from './router'
import i18n from './i18n'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import sm4Utils from '@/utils/sm4'
const app = createApp(App)
app.config.globalProperties.$sm4 = {
encrypt: sm4Utils.encrypt,
decrypt: sm4Utils.decrypt,
getInstance: sm4Utils.getSm4Instance,
getConfig: sm4Utils.getDefaultConfig,
config: sm4Utils.sm4Config,
}
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
window._AMapSecurityConfig = {
securityJsCode: import.meta.env.VUE_APP_AMAP_SECURITY_KEY
}
const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}

6
src/router/index.js

@ -5,6 +5,7 @@ import Showings from "../views/showings/index.vue";
import HouseDetail from "../views/showings/houseDetail.vue";
import apartmentDetail from "../views/showings/apartmentDetail.vue";
import roomTypeList from "../views/showings/roomTypeList.vue";
import test from "../views/test/index.vue";
const router = createRouter({
history: createWebHashHistory(import.meta.env.BASE_URL),
routes: [
@ -37,6 +38,11 @@ const router = createRouter({
path: '/roomTypeList',
name: 'roomTypeList',
component: roomTypeList,
},
{
path: '/test',
name: 'test',
component: test,
}
],
});

22
src/utils/http.ts

@ -1,5 +1,5 @@
import axios from 'axios'
import type { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse} from 'axios' //, InternalAxiosRequestConfig
import type { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig} from 'axios' //, InternalAxiosRequestConfig
// 数据返回的接口
// 定义请求响应参数,不含data
interface Result {
@ -37,16 +37,16 @@ class RequestHttp {
* -> [] ->
* token校验(JWT) : token,vuex/pinia/
*/
// this.service.interceptors.request.use(
// (config: InternalAxiosRequestConfig) => {
// config.headers['Authorization'] = localStorage.getItem('token') || ''
// return config
// },
// (error: AxiosError) => {
// // 请求报错
// Promise.reject(error)
// }
// )
this.service.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
config.headers['Authorization'] = localStorage.getItem('token') || 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2NsaWVudCI6ImFzZGg1IiwibG9naW5fdXNlcl9rZXkiOjEwMTk4fQ.0PBl9f8c0bb2y0P5NpOEzo8GDeTCrgQ_D1JVDvya4nQeCfh6z-s1W33muAU-hU-vNOXezCUhEnTN1GymYIAzDQ'
return config
},
(error: AxiosError) => {
// 请求报错
Promise.reject(error)
}
)
/**
*

86
src/utils/sm4.js

@ -0,0 +1,86 @@
// 使用require语法引入gm-crypt
import { sm4 } from 'gm-crypt'
// SM4默认配置
const sm4Config = {
key: "0F2U3wabvOMfs2Y1",
mode: "ecb", // 加密的方式有两种,ecb和cbc两种,这里使用的是cbc,cbc模式还要加一个iv的参数,ecb不用
// cipherType: "base64", //
// iv: "1234567890abcdef", // 16字符,符合要求
}
// 创建全局SM4实例
const sm4Instance = new sm4(sm4Config)
/**
* SM4加密
* @param {string} data - 要加密的数据
* @param {object} config - 可选的配置参数会覆盖默认配置
* @returns {string} - 加密后的数据
*/
export function encrypt(data, config = {}) {
if (!data) {
console.warn('SM4加密:数据为空')
return ''
}
console.log(data, 666);
try {
const finalConfig = { ...sm4Config, ...config }
const sm4Cipher = new sm4(finalConfig)
console.log(sm4Cipher.encrypt(data), '加密');
return sm4Cipher.encrypt(data)
} catch (error) {
console.error('SM4加密失败:', error)
return ''
}
}
/**
* SM4解密
* @param {string} data - 要解密的数据
* @param {object} config - 可选的配置参数会覆盖默认配置
* @returns {string} - 解密后的数据
*/
export function decrypt(data, config = {}) {
if (!data) {
console.warn('SM4解密:数据为空')
return ''
}
try {
const finalConfig = { ...sm4Config, ...config }
const sm4Cipher = new sm4(finalConfig)
console.log(sm4Cipher.decrypt(data), '解密');
return sm4Cipher.decrypt(data)
} catch (error) {
console.error('SM4解密失败:', error)
return ''
}
}
/**
* 获取默认SM4实例
* @returns {object} - SM4实例
*/
export function getSm4Instance() {
return sm4Instance
}
/**
* 获取默认配置
* @returns {object} - 默认配置
*/
export function getDefaultConfig() {
return { ...sm4Config }
}
// 导出所有方法
export default {
encrypt,
decrypt,
getSm4Instance,
getDefaultConfig,
sm4Config
}

22
src/views/policy/index.vue

@ -56,24 +56,13 @@
<!-- 详情 -->
<div v-show="showDetail" class=" relative">
<div class="text-white flex items-center mb-2 absolute -top-16">
<span
class="cursor-pointer text-xl"
@click="handleBack"
>信息公告</span
><span class="text-2xl">>详情</span>
<span class="cursor-pointer text-xl"
@click="handleBack">信息公告</span><span class="text-xl">>详情</span>
</div>
<div class="bg-white rounded pb-9 px-6 pt-6">
<h1 class="text-center">{{ policyInfo.title }}</h1>
<div>
<span class="mr-5">{{
policyInfo.dicId === "1"
? "住房政策"
: policyInfo.dicId === "2"
? "人才政策"
: policyInfo.dicId === "3"
? "就业政策"
: ""
}}</span>
<span class="mr-5">{{ policyType }}</span>
<span class="text-gray-400">{{ policyInfo.createTime }}</span>
</div>
<div v-html="policyInfo.detail"></div>
@ -106,6 +95,7 @@ interface ApiResponse<T> {
data?: T;
}
const showDetail = ref(false);
const policyType = ref('');
const router = useRouter();
const handleClickTab = (item: any) => {
active.value = item.dictValue;
@ -165,6 +155,10 @@ const toPolicyDetail = async (itemOrId: PolicyItem | string | number) => {
const id = typeof itemOrId === "object" ? itemOrId.id : itemOrId;
const res = (await getPolicyInfo(Number(id))) as unknown as ApiResponse<PolicyItem>;
policyInfo.value = res.data || {};
// tabList
const foundType = tabList.value.find(item => item.dictValue === policyInfo.value.dicId);
policyType.value = foundType ? foundType.dictLabel : '其他政策';
showDetail.value = true;
};
const handleBack = () => {

2
src/views/showings/apartmentDetail.vue

@ -4,7 +4,7 @@
{ title: '看房', path: '/Showings' },
{ title: '公寓详情', path: '' },
]"
:width="1678"
:width="1310"
/>
<div class="w-[1310px] mx-auto mt-10 bg-white pb-9 px-6 pt-6 rounded relative">
<div class="title ">

2
src/views/showings/houseDetail.vue

@ -5,7 +5,7 @@
{ title: '公寓详情', path: '/apartmentDetail', query: { deptId: deptId } },
{ title: '公寓房型', path: '/roomTypeList', query: { apartmentId: deptId } },
{ title: '房型详情', path: '' },
]" :width="1678" />
]" :width="1310" />
<div class="w-[1310px] mx-auto mt-10 bg-white pb-9 px-14 pt-6 rounded relative">
<div class="title ">
<h3 class="font-bold text-2xl">房型详情</h3>

749
src/views/test/index.vue

@ -0,0 +1,749 @@
<template>
<div class="H5_messageCss mt-20">
<div class="H5_titleBacBox">
<span style="color: rgba(244,89,2,1);font-size: 14px;font-weight: bold;">温馨提示</span>
<p style="color: rgba(244,89,2,1);font-size: 13px;line-height: 19px;margin-top: 8px;">
<span>已就业</span>申请人应完成就业登记或按规定正在我市缴纳城镇企业职工基本养老保险基本医疗保险灵活就业的申请人应完成灵活就业登记或按规定正在我市缴纳城镇企业职工基本养老保险基本医疗保险
</p>
<p style="color: rgba(244,89,2,1);font-size: 13px;line-height: 19px;margin-top: 8px;">
<span>已创业</span>申请人创办企业个体工商户及民办非企业单位社会团体事务所等创业实体可以是法定代表人可以是股东且对股东占股比例没有要求需在工商登记或相应登记统一社会信用代码证中能查到担任法定代表人占股等信息
</p>
<!-- <p style="color: rgba(244,89,2,1);font-size: 13px;line-height: 19px;margin-top: 8px;">
系统已自动获取"爱山东"绑定手机号用于接收平台信息如需变更请及时前往"爱山东"我的编辑资料手机号功能模块更新
</p> -->
<span style="color: rgba(244,89,2,1);font-size: 13px;font-weight: bold;">请如实填写您的信息以免影响审核</span>
</div>
<div class="H5_titleBac" style="padding-bottom: 70px;">
<el-form>
<span
style="color: rgba(16,16,16,1);font-size: 16px;font-weight:bold;width: 100%;text-align: left;margin-top: 10px;">
请先选择您的申请条件
</span>
<p style="width:100%;text-align:left;color: rgba(16,16,16,1);font-size: 16px;margin: 20px 0;">1您的院校类型</p>
<div class="H5_radioCss">
<el-radio-group v-model="schoolType" class="radio-group">
<el-radio label="0">普通高等学校</el-radio>
<el-radio label="1">技工学校</el-radio>
</el-radio-group>
</div>
<p style="width:100%;text-align:left;color: rgba(16,16,16,1);font-size: 16px;margin: 20px 0;">2您当前的学业状态</p>
<div class="H5_radioCss">
<el-radio-group v-model="studyState" class="radio-group">
<el-radio label="1">已毕业</el-radio>
<el-radio label="0">毕业学年内</el-radio>
</el-radio-group>
</div>
<p style="width:100%;text-align:left;color: rgba(16,16,16,1);font-size: 16px;margin: 20px 0;">3您当前的工作状态</p>
<div class="H5_radioCss">
<el-radio-group v-model="employState" class="radio-group">
<el-radio label="0">求职中</el-radio>
<el-radio label="1">已就业</el-radio>
<el-radio label="2">已创业</el-radio>
</el-radio-group>
</div>
<div v-if="!employState || employState == '0'" class="w-full">
<p style="width:100%;text-align:left;color: rgba(16,16,16,1);font-size: 16px;margin: 20px 0;">4您是否是低保家庭毕业生</p>
<p style="color:#fa9629;font-size: 13px;">
按政策要求,低保家庭须求职中的毕业生可选
</p>
<div class="H5_radioCss">
<el-radio-group v-model="greenChannelState" class="radio-group" @change="handleChangePoor">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</div>
<div v-show="greenChannelState == '1'">
<p style="width:100%;text-align:left;color: rgba(16,16,16,1);font-size: 16px;margin: 20px 0;">
请填写低保家庭申请人信息
</p>
<div class="form-group">
<el-form-item label="申请人姓名" required>
<el-input v-model="dibaoApplicationName" placeholder="请输入" />
</el-form-item>
<el-form-item label="身份证号" required>
<el-input v-model="dibaoApplicationIdCard" placeholder="请输入" />
</el-form-item>
</div>
</div>
</div>
<el-divider class="H5_divider" />
<p
style="width:100%;text-align:left;color: rgba(16,16,16,1);font-size: 16px;margin-top: 20px;display: flex;align-items: center;justify-content: space-between;">
联系电话{{ desensitizePhoneNumber(telephone || userInfo.mobile) }}
<img src="@/assets/images/eyeOpen.png" alt="" class="H5_eye" @click="eyeData = !eyeData" v-if="!eyeData">
<img src="@/assets/images/eyeClose.png" alt="" class="H5_eye" @click="eyeData = !eyeData" v-if="eyeData">
</p>
<p style="width:100%;text-align:left;color: rgba(16,16,16,1);font-size: 16px;margin: 20px 0;">
是否更换联系电话(用于接收短信通知)</p>
<div class="H5_radioCss" style="margin-top: 0px;">
<el-radio-group v-model="isUpdatePhone" class="radio-group" @change="handleIsUpPhone">
<el-radio label="0"></el-radio>
<el-radio label="1"></el-radio>
</el-radio-group>
</div>
<el-form-item label="新的联系电话" required v-if="isUpdatePhone == 1">
<el-input v-model="updatePhone" placeholder="请输入" @blur="handlePhoneNumber" />
</el-form-item>
<!-- <div class="H5_yzmCss" v-if="isUpdatePhone == 1">
<el-form-item label="验证码" required>
<el-input v-model="verificationCode" placeholder="请输入" />
</el-form-item>
<div class="H5_yzmItem">
<span v-if="SendYzmFlagShow" @click="handleSendYzm">发送验证码</span>
<span class="timeRemider " v-else>{{ countDownTime }}s后重发</span>
</div>
</div> -->
<p style="font-size: 14px;line-height: 23px;text-indent: 0.5em;margin-top: 10px;" class="H5_checkbox">
<label style="font-size: 20px;">
<input type="checkbox" v-model="checked" style="width:18px; height:18px;">
</label>
我承诺所填信息均为本人当前真实有效信息若与事实不符造成未获得入住资格等后果均由本人自行承担
</p>
</el-form>
</div>
<div class="H5_btn" :class="!checked ? 'H5_btnDisable' : ''" @click="handleImOk" v-if="employState == 0">下一步</div>
<div class="H5_btn" :class="!checked ? 'H5_btnDisable' : ''" @click="checkInfoCollection" v-else>同意并提交</div>
<el-dialog v-model="isPoor" title="温馨提示" width="90%" :close-on-click-modal="false" class="H5_popup1">
<img src="@/assets/images/changeTimeBac.png" alt="" style="width: 100%;position: absolute;top: 0;height: 80px;">
<img src="@/assets/images/changeTimeBac2.png" alt=""
style="width: 100%;position: absolute;height: calc(100% - 80px);bottom: 0;">
<img src="@/assets/images/changeTime.png" alt=""
style="width: 109px;height: 66px;position: absolute;top: 8px;right: 14px;">
<div class="H5_popupTitle">
<span>温馨提示</span>
</div>
<p class="H5_popupText" style="font-size: 14px;">
如果您是绿色通道人员需要补充相关证明材料并由工作人员审核
</p>
<template #footer>
<div class="H5_popupBottom">
<el-button type="primary" round class="H5_sureButton" style="height:35px;width:100px;" @click="isPoor = false">
知道了
</el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="changeSure" title="温馨提醒" width="80%" :close-on-click-modal="false" class="H5_popup2">
<img src="@/assets/images/changeRoomOkBac.png" alt=""
style="width: 100%;height: 100%;position: absolute;top: 0;z-index: -1;">
<img src="@/assets/images/shibai.png" style="width: 118.49px;height: 101px;margin: auto;">
<div class="H5_popup2Title" style="padding: 0 20px;width: 100%;">
<span style="font-size: 24px;font-weight: bold;">温馨提醒</span>
<p style="font-size: 17px;margin-top: 8px;">{{ changeMsg }}</p>
</div>
<template #footer>
<div class="H5_popupBottom" style="margin: 20px 0;">
<el-button type="danger" round style="height:35px;" @click="handleSure" v-show="codeData == 1003">
确认取消
</el-button>
<el-button type="primary" round class="H5_sureButton" style="height:35px;" @click="handleThink"
v-show="codeData == 1003">
我再想想
</el-button>
<el-button type="primary" round class="H5_sureButton" style="height:35px;"
v-show="codeData == 1002 || codeData == 1001" @click="changeSure = false; router.push('/home')">
我知道了
</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, reactive, watch, onMounted, onBeforeUnmount } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import api from '@/api/indexH5' //
import request from '@/utils/http' // HTTP
import { encrypt, decrypt } from '@/utils/sm4' // SM4
const router = useRouter()
//
const countDownTime = ref(60)
const SendYzmFlagShow = ref(true)
const verificationCode = ref('')
const eyeData = ref(true)
const changeSure = ref(false)
const changeMsg = ref('')
const codeData = ref('')
const checked = ref(false)
const isPoor = ref(false)
const isDisabled = ref(false)
const schoolType = ref('')
const studyState = ref('')
const employState = ref('')
const updatePhone = ref('')
const isUpdatePhone = ref('0')
const greenChannelState = ref('0')
const type = ref('')
const queryData = ref({})
const userInfo = ref(JSON.parse('{"name":"马魁","papersnumber":"371102199406042213","sex":"1","mobile":"17637262081","uuid":"2de928f4c75da51a6e5d1dd3ced7b6c9","paperstype":"1"}'))
const dibaoApplicationName = ref('')
const dibaoApplicationIdCard = ref('')
const graduateId = ref('')
const telephone = ref('')
const initialFormData = ref({})
//
const handleSendYzm = () => {
if (!updatePhone.value) {
ElMessage.error('请先填写手机号码!')
return
}
let timer = null
request.get(api.sendVerificationCode, {
params: {
mobile: encrypt(updatePhone.value),
},
}).then(function (data) {
if (data.code == 200) {
SendYzmFlagShow.value = false
clearInterval(timer)
timer = setInterval(function () {
if (countDownTime.value > 1) {
countDownTime.value--
} else {
countDownTime.value = 60
SendYzmFlagShow.value = true
clearInterval(timer)
}
}, 1000)
}
}).catch(error => {
console.error('出错:', error)
})
}
const desensitizePhoneNumber = (phone) => {
return eyeData.value ? phone.replace(/^(\d{3})\d{4}(\d{4})$/, "$1****$2") : phone
}
const handleThink = () => {
changeSure.value = false
}
const handleSure = () => {
request.post(api.cancelRegister, {}).then(function (data) {
if (data.code == 200) {
ElMessage.success(data.msg)
changeSure.value = false
handleImOk()
}
}).catch(error => {
console.error('出错:', error)
})
}
const restoreFormData = () => {
const savedData = localStorage.getItem('sqtjNew_formData')
console.log('尝试恢复本地数据:', savedData)
if (savedData) {
try {
const formData = JSON.parse(savedData)
console.log('解析的本地数据:', formData)
// 24
const isExpired = Date.now() - formData.timestamp > 24 * 60 * 60 * 1000
console.log('数据是否过期:', isExpired)
if (!isExpired) {
schoolType.value = formData.schoolType || ''
studyState.value = formData.studyState || ''
employState.value = formData.employState || ''
greenChannelState.value = formData.greenChannelState || '0'
dibaoApplicationName.value = formData.dibaoApplicationName || ''
dibaoApplicationIdCard.value = formData.dibaoApplicationIdCard || ''
console.log('恢复后的数据:', {
schoolType: schoolType.value,
studyState: studyState.value,
employState: employState.value,
greenChannelState: greenChannelState.value,
dibaoApplicationName: dibaoApplicationName.value,
dibaoApplicationIdCard: dibaoApplicationIdCard.value
})
}
} catch (error) {
console.error('恢复表单数据失败:', error)
}
}
}
//
const clearFormData = () => {
localStorage.removeItem('sqtjNew_formData')
}
// localStorage
const saveFormData = () => {
const formData = {
schoolType: schoolType.value,
studyState: studyState.value,
employState: employState.value,
greenChannelState: greenChannelState.value,
dibaoApplicationName: dibaoApplicationName.value,
dibaoApplicationIdCard: dibaoApplicationIdCard.value,
timestamp: Date.now()
}
localStorage.setItem('sqtjNew_formData', JSON.stringify(formData))
}
const selectMzGraduateInfoH5 = () => {
request.get(api.selectMzGraduateInfoH5, {
params: {
// idCard: userInfo.value.papersnumber,
},
}).then(function (data) {
if (data.code == 200) {
// console.log('', data.data)
graduateId.value = data.data.id
// telephone.value = data.data.telephone//
graduateInfoCollectionList(data.data.id)
}
}).catch(error => {
console.error('出错:', error)
})
}
const handleIsUpPhone = () => {
verificationCode.value = ''
updatePhone.value = ''
}
const handlePhoneNumber = () => {
const phonePattern = /^1[3-9]\d{9}$/ //
if (!phonePattern.test(updatePhone.value) && updatePhone.value != '') {
ElMessage.error('手机号码输入不规范')
updatePhone.value = ''
} else {
}
}
const graduateInfoCollectionList = (id) => {
request.get(api.graduateInfoCollectionNEW, {
params: {
graduateId: id,
},
}).then(function (data) {
// console.log('chaxun', data.rows)
initialFormData.value = {
schoolType: data.data.schoolType.toString(),
studyState: data.data.studyState.toString(),
employState: data.data.employState.toString(),
greenChannelState: data.data.greenChannelState.toString(),
dibaoApplicationName: data.data.dibaoApplicationName,
dibaoApplicationIdCard: data.data.dibaoApplicationIdCard,
telephone: decrypt(data.data.telephone).toString()
}
dibaoApplicationName.value = decrypt((data.data.dibaoApplicationName)).toString()
dibaoApplicationIdCard.value = decrypt((data.data.dibaoApplicationIdCard).toString())
schoolType.value = (data.data.schoolType).toString()
studyState.value = (data.data.studyState).toString()
employState.value = (data.data.employState).toString()
greenChannelState.value = (data.data.greenChannelState).toString()
telephone.value = decrypt(data.data.telephone).toString()
//
if (!telephone.value || !dibaoApplicationName.value || !dibaoApplicationIdCard.value ||
dibaoApplicationName.value === 'null' || dibaoApplicationIdCard.value === 'null' ||
dibaoApplicationName.value === 'undefined' || dibaoApplicationIdCard.value === 'undefined' ||
!schoolType.value || !studyState.value || !employState.value) {
console.log('服务器数据为空,尝试恢复本地数据')
restoreFormData()
}
}).catch(error => {
console.error('出错:', error)
//
console.log('请求失败,尝试恢复本地数据')
})
}
const validator = (val) => {
const card15 = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$/
const card18 = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
return card15.test(val) || card18.test(val)
}
const handleChangePoor = (val) => {
console.log(val)
if (val == '1') {
// isPoor.value = true
}
}
const checkInfoCollection = () => {
if (!checked.value) {
ElMessage.warning('请先确认"我承诺所填信息均为本人当前真实有效信息,若与事实不符造成未获得入住资格等后果均由本人自行承担。"的全部内容')
return
}
if (updatePhone.value == '' && isUpdatePhone.value == 1) {
ElMessage.error('请输入正确的手机号码!')
return
}
// if (verificationCode.value == '' && isUpdatePhone.value == 1) {
// showToast('')
// return
// }
request.get(api.checkInfoCollection + employState.value).then(function (data) {
codeData.value = data.code
if (data.code == 200) {
handleImOk()
} else if (data.code == 1001) {
// router.push({ path: '/xfjl' })
changeMsg.value = data.msg
changeSure.value = true
} else if (data.code == 1002) {
changeSure.value = true
changeMsg.value = data.msg
} else if (data.code == 1003) {
changeSure.value = true
changeMsg.value = data.msg
}
}).catch(error => {
console.error('出错:', error)
})
}
//
const graduateEdit = () => {
//
const currentFormData = {
schoolType: schoolType.value,
studyState: studyState.value,
employState: employState.value,
greenChannelState: greenChannelState.value,
dibaoApplicationName: dibaoApplicationName.value,
dibaoApplicationIdCard: dibaoApplicationIdCard.value,
telephone: updatePhone.value ? updatePhone.value : telephone.value,
// verificationCode: verificationCode.value
}
if (JSON.stringify(currentFormData) == JSON.stringify(initialFormData.value)) {
ElMessage.info('您提交的信息未更新,无需提交。')
return
}
let data = {
contactPhone: encrypt(userInfo.value.mobile),
hopeCareer: '',
hopeSalary: '',
hopeWorkAddress: '',
uuid: userInfo.value.uuid,
gender: userInfo.value.sex == 1 ? 1 : 2,
telephone: isUpdatePhone.value == '1' ? encrypt(updatePhone.value) : (encrypt(telephone.value) || encrypt(userInfo.value.mobile)),
graduateName: encrypt(userInfo.value.name),
graduateId: graduateId.value,
idCard: encrypt(userInfo.value.papersnumber),
schoolType: Number(schoolType.value), // 01
studyState: Number(studyState.value), // 01
employState: Number(employState.value), // 0 1 2
greenChannelState: (employState.value == '0' && studyState.value == '0') ? Number(greenChannelState.value) : 0, // 绿 01
dibaoApplicationName: (greenChannelState.value == '1' && employState.value == '0' && studyState.value == '0') ? encrypt(dibaoApplicationName.value) : '', //
dibaoApplicationIdCard: (greenChannelState.value == '1' && employState.value == '0' && studyState.value == '0') ? encrypt(dibaoApplicationIdCard.value) : '', //
verificationCode: verificationCode.value,
}
request.post(api.graduateInfoCollection, data).then(function (data) {
console.log('更新成功与否', data)
if (data.code == 200) {
//
clearFormData()
router.push('/yycg2')
} else {
ElMessage.error(data.msg)
}
}).catch(error => {
console.error('出错:', error)
})
}
const handleImOk = () => {
if (!checked.value) {
ElMessage.warning('请先确认"我承诺所填信息均为本人当前真实有效信息,若与事实不符造成未获得入住资格等后果均由本人自行承担。"的全部内容')
return
}
if (employState.value == '0' && greenChannelState.value == '1') {
if (dibaoApplicationName.value == '' || dibaoApplicationIdCard.value == '') {
ElMessage.warning('请完善信息')
return false
}
if (validator(dibaoApplicationIdCard.value)) {
} else {
ElMessage.error('格式不正确,请重新输入!')
dibaoApplicationIdCard.value = ''
return
}
} else {
// dibaoApplicationName.value = ''
// dibaoApplicationIdCard.value = ''
}
if (updatePhone.value == '' && isUpdatePhone.value == 1) {
ElMessage.error('请输入正确的手机号码!')
return
}
// if (verificationCode.value == '' && isUpdatePhone.value == 1) {
// showToast('')
// return
// }
if (schoolType.value != '' && studyState.value != '' && employState.value != '' && greenChannelState.value != '') {
if (employState.value == 0) {
const sqtjInfo = {
contactPhone: encrypt(userInfo.value.mobile),
uuid: userInfo.value.uuid,
gender: userInfo.value.sex == 1 ? 1 : 2,
telephone: isUpdatePhone.value == '1' ? encrypt(updatePhone.value) : (encrypt(telephone.value) || encrypt(userInfo.value.mobile)),
graduateName: encrypt(userInfo.value.name),
graduateId: graduateId.value,
idCard: encrypt(userInfo.value.papersnumber),
schoolType: Number(schoolType.value), // 01
studyState: Number(studyState.value), // 01
employState: Number(employState.value), // 0 1 2
greenChannelState: employState.value == '0' ? Number(greenChannelState.value) : 0, // 绿 01
dibaoApplicationName: (greenChannelState.value == '1' && employState.value == '0') ? encrypt(dibaoApplicationName.value) : '', //
dibaoApplicationIdCard: (greenChannelState.value == '1' && employState.value == '0') ? encrypt(dibaoApplicationIdCard.value) : '', //
verificationCode: verificationCode.value
}
router.push({
path: '/qzxxNew',
query: {
data: JSON.stringify(sqtjInfo)
}
})
//
clearFormData()
} else {
graduateEdit()
}
} else {
ElMessage.warning('请完善信息')
}
}
// localStorage
watch(schoolType, () => {
saveFormData()
})
watch(studyState, () => {
saveFormData()
})
watch(employState, () => {
saveFormData()
})
watch(greenChannelState, () => {
saveFormData()
})
watch(dibaoApplicationName, () => {
saveFormData()
})
watch(dibaoApplicationIdCard, () => {
saveFormData()
})
//
onMounted(() => {
restoreFormData()
// userInfo.value = JSON.parse()
console.log('userInfo', userInfo.value)
// const paramsStr = route.query
// queryData.value = paramsStr
selectMzGraduateInfoH5()
})
//
onBeforeUnmount(() => {
saveFormData()
})
</script>
<style lang="scss" scoped>
.H5_messageCss {
width: 100%;
height: 100vh;
z-index: 2;
position: absolute;
top: 0px;
left: 0px;
background-color: rgb(255, 255, 255);
}
.H5_titleBac {
width: 100%;
background: url('@/assets/images/resultBac.png') no-repeat center/100% 100%;
display: flex;
flex-direction: column;
align-items: center;
padding: 10px 25px 0px 25px;
}
.H5_btn {
position: fixed;
bottom: 20px;
left: 0;
right: 0;
width: 414px;
height: 80px;
line-height: 70px;
border-radius: 600px;
background: linear-gradient(86.25deg, rgba(13, 198, 198, 1) 3.03%, rgba(19, 194, 194, 1) 3.03%, rgba(70, 219, 213, 1) 96.43%);
color: rgba(255, 255, 255, 1);
font-size: 34px;
text-align: center;
margin: auto;
margin-top: 80px;
font-family: AlibabaPuHui-regular;
}
.H5_btnDisable {
background: #9F9F9F;
color: #FFFFFF;
}
.H5_radioCss {
height: 70px;
margin-top: 20px;
width: 100%;
display: flex;
justify-content: space-evenly;
.radio-group {
width: 100%;
display: flex;
justify-content: space-around;
}
:deep(.el-radio) {
font-size: 30px;
}
}
.form-group {
margin: 20px 0;
:deep(.el-form-item) {
margin-bottom: 15px;
}
:deep(.el-form-item__label) {
font-size: 16px;
color: rgba(16,16,16,1);
}
:deep(.el-input) {
width: 100%;
}
}
.H5_titleBacBox {
width: 100%;
background-color: rgba(255, 240, 217, 1);
padding: 10px 20px;
}
//
.H5_popup1 {
:deep(.el-dialog) {
border-radius: 20px;
}
.H5_popupText {
width: calc(100% - 40px);
position: absolute;
top: 150px;
left: 20px;
border-radius: 12px;
padding: 20px 30px;
color: rgba(16, 16, 16, 1);
}
.H5_popupTitle {
position: absolute;
display: flex;
flex-direction: column;
color: rgba(0, 0, 0, 1);
font-size: 32px;
font-weight: bold;
left: 20px;
top: 50px;
}
.H5_popupBottom {
text-align: center;
width: 100%;
.H5_sureButton {
background: linear-gradient(86.25deg, rgba(13, 198, 198, 1) 3.03%, rgba(19, 194, 194, 1) 3.03%, rgba(70, 219, 213, 1) 96.43%);
border: none;
}
}
}
.H5_checkbox :deep().el-checkbox__inner {
width: 30px;
height: 30px;
border: 2px solid black;
}
.H5_checkbox :deep().el-checkbox__inner::after {
width: 10px !important;
height: 15px !important;
}
.H5_popup2 {
:deep(.el-dialog) {
border-radius: 20px;
}
.H5_popup2Title {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
color: rgba(0, 0, 0, 1);
}
.H5_popupBottom {
display: flex;
justify-content: space-evenly;
width: 100%;
.H5_sureButton {
background: linear-gradient(86.25deg, rgba(13, 198, 198, 1) 3.03%, rgba(19, 194, 194, 1) 3.03%, rgba(70, 219, 213, 1) 96.43%);
border: none;
}
}
}
.H5_divider {
width: 100%;
border-color: #000;
}
.H5_eye {
width: 40px;
height: 35px;
}
.H5_yzmCss {
width: 100%;
display: flex;
align-items: center;
}
.H5_yzmItem {
width: 40%;
border: gray solid 1px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
height: 80px;
font-size: 28px;
}
</style>
Loading…
Cancel
Save