Merge pull request 'dev-2025' (#2) from dev-2025 into main
Reviewed-on: #2
This commit is contained in:
@@ -163,6 +163,17 @@ class HoperunSignController {
|
||||
monthAttLog.autoDakaBeginTime = autoDaka.beginTime
|
||||
monthAttLog.autoDakaEndTime = autoDaka.endTime
|
||||
}
|
||||
monthAttResult.forEach {
|
||||
it.actual_area_begin =
|
||||
if (!it.actual_area_begin.isNullOrBlank()) {
|
||||
if (it.actual_area_begin == "buqianka") "补签卡" else
|
||||
area_regex.find(it.actual_area_begin!!)?.groups?.get(0)?.value
|
||||
} else null
|
||||
it.actual_area_end = if (!it.actual_area_end.isNullOrBlank()) {
|
||||
if (it.actual_area_end == "buqianka") "补签卡" else
|
||||
area_regex.find(it.actual_area_end!!)?.groups?.get(0)?.value
|
||||
} else null
|
||||
}
|
||||
return monthAttResult
|
||||
}
|
||||
|
||||
@@ -374,6 +385,8 @@ class WebResult<T> protected constructor() : java.io.Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
val area_regex = Regex(".*[\\u4e00-\\u9fa5]|[0-9][\\u4e00-\\u9fa5]")
|
||||
|
||||
data class MonthAttLog(
|
||||
var area_id: String? = null,
|
||||
var area_id_begin: String? = null,
|
||||
@@ -390,6 +403,8 @@ data class MonthAttLog(
|
||||
var yearmonth: String? = null,
|
||||
var autoDakaBeginTime: String? = null,
|
||||
var autoDakaEndTime: String? = null,
|
||||
var actual_area_begin: String? = null,
|
||||
var actual_area_end: String? = null
|
||||
)
|
||||
|
||||
data class HoperunDakaRequest(
|
||||
|
||||
@@ -35,7 +35,7 @@ class AutoDakaScheduler {
|
||||
val logger: Logger = LoggerFactory.getLogger("DAKA-SHCEDULER")
|
||||
}
|
||||
|
||||
fun addAutoDakaScheduled(dakaDate: String = getNowDateyyyy_MM_dd()) {
|
||||
private fun addAutoDakaScheduled(dakaDate: String = getNowDateyyyy_MM_dd()) {
|
||||
// 调休的工作日
|
||||
if (isNeedDaka(dakaDate)) {
|
||||
HoperunUserConfig.userConfigMap.forEach { (_, v) ->
|
||||
@@ -45,8 +45,8 @@ class AutoDakaScheduler {
|
||||
if (daka == null) {
|
||||
daka = generateDakaInfo(v, dakaDate)
|
||||
dakaQueue.add(daka)
|
||||
logger.info("添加打卡任务: ${v.username}, $daka")
|
||||
}
|
||||
logger.info("${v.username},${daka.toCsv()}")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -89,9 +89,9 @@ class AutoDakaScheduler {
|
||||
try {
|
||||
logger.info("[EXECUTE]BEGIN:${daka.employeeNo}:DATE:${daka.dakaDate}:TIME:${daka.beginTime}")
|
||||
// 模拟重新登录打卡
|
||||
logger.info("${daka.employeeNo}OLD-JSESSIONID: ${sessionMap[daka.employeeNo]}")
|
||||
logger.info("${daka.employeeNo}-OLD-JSESSIONID: ${sessionMap[daka.employeeNo]}")
|
||||
resetJSessionId(employeeNo = daka.employeeNo)
|
||||
logger.info("${daka.employeeNo}NEW-JSESSIONID: ${sessionMap[daka.employeeNo]}")
|
||||
logger.info("${daka.employeeNo}-NEW-JSESSIONID: ${sessionMap[daka.employeeNo]}")
|
||||
val resp: DakaResponse =
|
||||
beginTime(employeeNo = daka.employeeNo, date = daka.dakaDate, time = daka.beginTime)
|
||||
if (resp.result != "success") {
|
||||
@@ -110,9 +110,9 @@ class AutoDakaScheduler {
|
||||
try {
|
||||
logger.info("[EXECUTE]END:${daka.employeeNo}:DATE:${daka.dakaDate}:TIME:${daka.endTime}")
|
||||
// 模拟重新登录打卡
|
||||
logger.info("${daka.employeeNo}OLD-JSESSIONID: ${sessionMap[daka.employeeNo]}")
|
||||
logger.info("${daka.employeeNo}-OLD-JSESSIONID: ${sessionMap[daka.employeeNo]}")
|
||||
resetJSessionId(employeeNo = daka.employeeNo)
|
||||
logger.info("${daka.employeeNo}NEW-JSESSIONID: ${sessionMap[daka.employeeNo]}")
|
||||
logger.info("${daka.employeeNo}-NEW-JSESSIONID: ${sessionMap[daka.employeeNo]}")
|
||||
val resp: DakaResponse = endTime(employeeNo = daka.employeeNo, date = daka.dakaDate, time = daka.endTime)
|
||||
if (resp.result != "success") {
|
||||
logger.error("打下班卡失败")
|
||||
@@ -137,6 +137,9 @@ class AutoDakaScheduler {
|
||||
schedulerThreadPool as ScheduledThreadPoolExecutor
|
||||
val queue = schedulerThreadPool.queue
|
||||
logger.info("任务队列数量: ${queue.size}")
|
||||
dakaQueue.forEach {
|
||||
logger.info(it.toString())
|
||||
}
|
||||
}
|
||||
|
||||
private fun getRandomEndTime(): String {
|
||||
@@ -167,4 +170,8 @@ data class Daka(
|
||||
fun toCsv(): String {
|
||||
return "$employeeNo,$dakaDate,$beginTime,$endTime,$added"
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "工号: $employeeNo, 日期: $dakaDate, 上班卡: $beginTime, 下班卡: $endTime, 定时开关: $added"
|
||||
}
|
||||
}
|
||||
@@ -89,12 +89,14 @@
|
||||
<!-- scheduler logger -->
|
||||
<logger name="DAKA-SHCEDULER" level="${logging.level}">
|
||||
<appender-ref ref="SCHEDULER-APPENDER"/>
|
||||
<appender-ref ref="STDOUT" />
|
||||
</logger>
|
||||
|
||||
<!-- application logger -->
|
||||
<logger name="com.pomelotea.hoperun.sign" level="${logging.level}" additivity="false">
|
||||
<appender-ref ref="ROOT-APPENDER"/>
|
||||
<appender-ref ref="ERROR-APPENDER"/>
|
||||
<appender-ref ref="STDOUT" />
|
||||
</logger>
|
||||
|
||||
|
||||
|
||||
@@ -1,131 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>打卡</title>
|
||||
<link rel="stylesheet" href="./normalize.min.css">
|
||||
<link rel="stylesheet" href="./style.css">
|
||||
</head>
|
||||
<body class="dark-mode"><!--partial:index.partial.html-->
|
||||
<div class="job">
|
||||
<div class="header">
|
||||
<div class="logo">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<path xmlns="http://www.w3.org/2000/svg"
|
||||
d="M512 503.5H381.7a48 48 0 01-45.3-32.1L265 268.1l-9-25.5 2.7-124.6L338.2 8.5l23.5 67.1L512 503.5z"
|
||||
fill="#0473ff" data-original="#28b446"/>
|
||||
<path xmlns="http://www.w3.org/2000/svg" fill="#0473ff" data-original="#219b38"
|
||||
d="M361.7 75.6L265 268.1l-9-25.5 2.7-124.6L338.2 8.5z"/>
|
||||
<path xmlns="http://www.w3.org/2000/svg"
|
||||
d="M338.2 8.5l-82.2 234-80.4 228.9a48 48 0 01-45.3 32.1H0l173.8-495h164.4z" fill="#0473ff"
|
||||
data-original="#518ef8"/>
|
||||
</svg>
|
||||
打卡
|
||||
</div>
|
||||
<div class="user-settings">
|
||||
<div class="dark-light">
|
||||
<svg viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5" fill="none" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<img class="user-profile" id="user-head" src="img/tx.png" alt="">
|
||||
<div id="user-div">
|
||||
<div id="username">未登陆</div>
|
||||
<span id="login-span">
|
||||
<div class="alert-inline">
|
||||
<div>
|
||||
<input class="login-input" id="employee-number" type="text" placeholder="输入工号">
|
||||
</div>
|
||||
<!--<div>
|
||||
<input class="login-input" style="width: 280px" id="jsessionId" type="text" placeholder="输入SESSIONID">
|
||||
</div>-->
|
||||
<div>
|
||||
<div id="autodaka">自动打卡开关</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="toggle toggle--switch">
|
||||
<input type="checkbox" id="toggle--switch" class="toggle--checkbox">
|
||||
<label class="toggle--btn" for="toggle--switch"><span class="toggle--feature" data-label-on="on" data-label-off="off"></span></label>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button class="random-buttons" id="login">登陆</button>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<div id="logout-div" style="display: none">
|
||||
<button class="random-buttons" id="logout">登出</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dialog" style="display: none">
|
||||
<div class="alert">
|
||||
<div class="job-card-title" id="sign-date"><span style="font-size: 24px"></span></div>
|
||||
<div class="alert-inline">
|
||||
<div><input id="sign-begin-time" type="text" placeholder="输入上班时间"></div>
|
||||
<div>
|
||||
<button class="random-buttons" id="sign-begin-random">随机</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert-inline">
|
||||
<div><input id="sign-end-time" type="text" placeholder="输入下班时间"></div>
|
||||
<div>
|
||||
<button class="random-buttons" id="sign-end-random">随机</button>
|
||||
</div>
|
||||
</div>
|
||||
<button class="search-buttons card-buttons begin-buttons" id="save-sign">保存</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="userinfo_dialog" style="display: none">
|
||||
<div class="alert">
|
||||
<div class="job-card-title"><span style="font-size: 24px">打卡信息</span></div>
|
||||
<div class="alert-inline">
|
||||
<div>
|
||||
<label for="_user_input">用 户 名 : </label>
|
||||
<input id="_user_input" readonly="readonly" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert-inline">
|
||||
<div>
|
||||
<label for="_project_id_input">项 目 I D: </label>
|
||||
<input id="_project_id_input" readonly="readonly" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert-inline">
|
||||
<div>
|
||||
<label for="_project_name_input">项目名称: </label>
|
||||
<input id="_project_name_input" readonly="readonly" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert-inline">
|
||||
<div>
|
||||
<label for="_area_input">打卡地区: </label>
|
||||
<input id="_area_input" readonly="readonly" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert-inline">
|
||||
<div>
|
||||
<label for="_device_input">设备信息: </label>
|
||||
<input id="_device_input" readonly="readonly" type="text">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wrapper">
|
||||
<div class="main-container">
|
||||
<div class="searched-jobs">
|
||||
<div class="searched-bar">
|
||||
<div class="searched-show">打卡记录</div>
|
||||
<!--<button class="search-button">餐补<span class="canbu-span"></span></button>--></div>
|
||||
<div class="job-cards"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="./coco-message.js"></script>
|
||||
<script src="./jquery.min.js"></script>
|
||||
<script src="./script.js"></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1 +1 @@
|
||||
<!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1" /><title>打卡</title><link rel="stylesheet"href="./normalize.min.css"><link rel="stylesheet"href="./style.css"></head><body class="dark-mode"><!--partial:index.partial.html--><div class="job"><div class="header"><div class="logo"><svg xmlns="http://www.w3.org/2000/svg"viewBox="0 0 512 512"><path xmlns="http://www.w3.org/2000/svg"d="M512 503.5H381.7a48 48 0 01-45.3-32.1L265 268.1l-9-25.5 2.7-124.6L338.2 8.5l23.5 67.1L512 503.5z"fill="#0473ff"data-original="#28b446"/><path xmlns="http://www.w3.org/2000/svg"fill="#0473ff"data-original="#219b38"d="M361.7 75.6L265 268.1l-9-25.5 2.7-124.6L338.2 8.5z"/><path xmlns="http://www.w3.org/2000/svg"d="M338.2 8.5l-82.2 234-80.4 228.9a48 48 0 01-45.3 32.1H0l173.8-495h164.4z"fill="#0473ff"data-original="#518ef8"/></svg>打卡</div><div class="user-settings"><div class="dark-light"><svg viewBox="0 0 24 24"stroke="currentColor"stroke-width="1.5"fill="none"stroke-linecap="round"stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path></svg></div><img class="user-profile"id="user-head"src="img/tx.png"alt=""><div id="user-div"><span id="login-span"><div class="alert-inline"><div><input class="login-input"id="employee-number"type="text"placeholder="输入工号"></div><!--<div><input class="login-input"style="width: 280px"id="jsessionId"type="text"placeholder="输入SESSIONID"></div>--><div><div id="autodaka">自动打卡开关</div></div><div><div class="toggle toggle--switch"><input type="checkbox"id="toggle--switch"class="toggle--checkbox"><label class="toggle--btn"for="toggle--switch"><span class="toggle--feature"data-label-on="on"data-label-off="off"></span></label></div></div><div><button class="random-buttons"id="login">登陆</button></div></div></span><div id="logout-div"style="display: none"><button class="random-buttons"id="logout">登出</button></div></div></div></div><div class="dialog"style="display: none"><div class="alert"><div class="job-card-title"id="sign-date"><span style="font-size: 24px"></span></div><div class="alert-inline"><div><input id="sign-begin-time"type="text"placeholder="输入上班时间"></div><div><button class="random-buttons"id="sign-begin-random">随机</button></div></div><div class="alert-inline"><div><input id="sign-end-time"type="text"placeholder="输入下班时间"></div><div><button class="random-buttons"id="sign-end-random">随机</button></div></div><button class="search-buttons card-buttons begin-buttons"id="save-sign">保存</button></div></div><div class="userinfo_dialog"style="display: none"><div class="alert"><div class="job-card-title"><span style="font-size: 24px">打卡信息</span></div><div class="alert-inline"><div><label for="_user_input">用户名:</label><input id="_user_input"readonly="readonly"type="text"></div></div><div class="alert-inline"><div><label for="_project_id_input">项目I D:</label><input id="_project_id_input"readonly="readonly"type="text"></div></div><div class="alert-inline"><div><label for="_project_name_input">项目名称:</label><input id="_project_name_input"readonly="readonly"type="text"></div></div><div class="alert-inline"><div><label for="_area_input">打卡地区:</label><input id="_area_input"readonly="readonly"type="text"></div></div><div class="alert-inline"><div><label for="_device_input">设备信息:</label><input id="_device_input"readonly="readonly"type="text"></div></div></div></div><div class="wrapper"><div class="main-container"><div class="searched-jobs"><div class="searched-bar"><div class="searched-show">打卡记录</div><!--<button class="search-button">餐补<span class="canbu-span"></span></button>--></div><div class="job-cards"></div></div></div></div><script src="./coco-message.js"></script><script src="./jquery.min.js"></script><script src="./script.js"></script></div></body></html>
|
||||
<!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1" /><title>打卡</title><link rel="stylesheet"href="./normalize.min.css"><link rel="stylesheet"href="./style.css"></head><body class="dark-mode"><!--partial:index.partial.html--><div class="job"><div class="header"><div class="logo"><svg xmlns="http://www.w3.org/2000/svg"viewBox="0 0 512 512"><path xmlns="http://www.w3.org/2000/svg"d="M512 503.5H381.7a48 48 0 01-45.3-32.1L265 268.1l-9-25.5 2.7-124.6L338.2 8.5l23.5 67.1L512 503.5z"fill="#0473ff"data-original="#28b446"/><path xmlns="http://www.w3.org/2000/svg"fill="#0473ff"data-original="#219b38"d="M361.7 75.6L265 268.1l-9-25.5 2.7-124.6L338.2 8.5z"/><path xmlns="http://www.w3.org/2000/svg"d="M338.2 8.5l-82.2 234-80.4 228.9a48 48 0 01-45.3 32.1H0l173.8-495h164.4z"fill="#0473ff"data-original="#518ef8"/></svg>打卡</div><div class="user-settings"><div class="dark-light"><svg viewBox="0 0 24 24"stroke="currentColor"stroke-width="1.5"fill="none"stroke-linecap="round"stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path></svg></div><img class="user-profile"id="user-head"src="img/tx.png"alt=""><div id="user-div"><div id="username">未登陆</div><span id="login-span"><div class="alert-inline"><div><input class="login-input"id="employee-number"type="text"placeholder="输入工号"></div><!--<div><input class="login-input"style="width: 280px"id="jsessionId"type="text"placeholder="输入SESSIONID"></div>--><div><div id="autodaka">自动打卡开关</div></div><div><div class="toggle toggle--switch"><input type="checkbox"id="toggle--switch"class="toggle--checkbox"><label class="toggle--btn"for="toggle--switch"><span class="toggle--feature"data-label-on="on"data-label-off="off"></span></label></div></div><div><button class="random-buttons"id="login">登陆</button></div></div></span><div id="logout-div"style="display: none"><button class="random-buttons"id="logout">登出</button></div></div></div></div><div class="dialog rainbow"style="display: none"><div class="alert"><div class="job-card-title"id="sign-date"><span style="font-size: 24px"></span></div><div class="alert-inline"><div><input id="sign-begin-time"type="text"placeholder="输入上班时间"></div><div><button class="random-buttons"id="sign-begin-random">随机</button></div></div><div class="alert-inline"><div><input id="sign-end-time"type="text"placeholder="输入下班时间"></div><div><button class="random-buttons"id="sign-end-random">随机</button></div></div><button class="search-buttons card-buttons begin-buttons"id="save-sign">保存</button></div></div><div class="userinfo_dialog rainbow"style="display: none"><div class="alert"><div class="job-card-title"><span style="font-size: 24px">打卡信息</span></div><div class="alert-inline"><div><label for="_user_input">用户名:</label><input id="_user_input"readonly="readonly"type="text"></div></div><div class="alert-inline"><div><label for="_project_id_input">项目I D:</label><input id="_project_id_input"readonly="readonly"type="text"></div></div><div class="alert-inline"><div><label for="_project_name_input">项目名称:</label><input id="_project_name_input"readonly="readonly"type="text"></div></div><div class="alert-inline"><div><label for="_area_input">打卡地区:</label><input id="_area_input"readonly="readonly"type="text"></div></div><div class="alert-inline"><div><label for="_device_input">设备信息:</label><input id="_device_input"readonly="readonly"type="text"></div></div></div></div><div class="wrapper"><div class="main-container"><div class="searched-jobs"><div class="searched-bar"><div class="searched-show">打卡记录</div><!--<button class="search-button">餐补<span class="canbu-span"></span></button>--></div><div class="job-cards"></div></div></div></div><script src="./coco-message.js"></script><script src="./jquery.min.js"></script><script src="./script.js"></script></div></body></html>
|
||||
|
||||
@@ -105,7 +105,15 @@ function loadDakaList() {
|
||||
dateBeginTimeMap[signlog.yearmonth] = (signlog.begin_time == null ? "未打卡" : signlog.begin_time.substr(11, 5));
|
||||
dateEndTimeMap[signlog.yearmonth] = (signlog.end_time == null ? "未打卡" : signlog.end_time.substr(11, 5));
|
||||
index++;
|
||||
$('.job-cards').append('<div class="job-card">' +
|
||||
let beginWarn = (signlog.begin_time != null && signlog.begin_time.substr(11, 5) > '09:30')
|
||||
let endWarn = (signlog.end_time != null && signlog.end_time.substr(11, 5) < '18:30')
|
||||
let buqianWarn = (signlog.actual_area_begin === '补签卡' || signlog.actual_area_end === '补签卡')
|
||||
let weidakaWarn = (signlog.begin_time == null || signlog.end_time == null)
|
||||
|
||||
$('.job-cards').append('<div class="job-card ' +
|
||||
(beginWarn || endWarn || weidakaWarn || buqianWarn ? 'rainbow' : '') + '" '+
|
||||
// (beginWarn || endWarn || weidakaWarn || buqianWarn ? 'style="border: 8px; border-color: #ff8611; border-radius: 8px; border-style: solid;"' : "") +
|
||||
'>' +
|
||||
'<div class="job-card-title">' + (nowDate === signlog.yearmonth ? "今天" : signlog.yearmonth) + '</div>' +
|
||||
'<div class="job-card-subtitle">' +
|
||||
signlog.area_id +
|
||||
@@ -113,15 +121,23 @@ function loadDakaList() {
|
||||
'<div class="job-detail-buttons">' +
|
||||
'<button class="search-buttons detail-button">' + (signlog.begin_time == null ? "未打卡" : signlog.begin_time.substr(11, 5)) + '</button>' +
|
||||
'<button class="search-buttons detail-button">' + (signlog.end_time == null ? "未打卡" : signlog.end_time.substr(11, 5)) + '</button>' +
|
||||
(signlog.autoDakaBeginTime == null ? "" : '<br><button class="search-buttons detail-button">定时上班卡时间: ' + signlog.autoDakaBeginTime + '</button>') +
|
||||
(signlog.autoDakaEndTime == null ? "" : '<button class="search-buttons detail-button">定时下班卡时间: ' + signlog.autoDakaEndTime + '</button>') +
|
||||
(signlog.end_time != null && signlog.end_time.substr(11, 5) > "21:00" ? '<button class="search-buttons detail-button">餐补</button>' : '') +
|
||||
(signlog.autoDakaBeginTime == null ? "" : '<button class="search-buttons detail-button" style="font-size: 10px">定时上班卡时间: ' + signlog.autoDakaBeginTime + '</button>') +
|
||||
(signlog.autoDakaEndTime == null ? "" : '<button class="search-buttons detail-button" style="font-size: 10px">定时下班卡时间: ' + signlog.autoDakaEndTime + '</button>') +
|
||||
// (signlog.end_time != null && signlog.end_time.substr(11, 5) > "21:00" ? '<button class="search-buttons detail-button">餐补</button>' : '') +
|
||||
'</div>' +
|
||||
(index <= 3 ? '<div class="job-card-buttons">' +
|
||||
'<button class="search-buttons card-buttons daka-buttons"' +
|
||||
'">打卡</button>' +
|
||||
'<button class="search-buttons card-buttons auto-daka-buttons">自动补卡</button>' +
|
||||
'</div>' : '') +
|
||||
(index > 3 ?
|
||||
'<div class="job-card-subtitle">' +
|
||||
signlog.actual_area_begin +
|
||||
'</div>' +
|
||||
(signlog.actual_area_begin !== signlog.actual_area_end ? '<div class="job-card-subtitle">' +
|
||||
signlog.actual_area_end +
|
||||
'</div>' : '')
|
||||
: '') +
|
||||
'</div>'
|
||||
);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
--border-color: #d8d8d8;
|
||||
--alert-bg-color: #e8f2ff;
|
||||
--subtitle-color: #83838e;
|
||||
--subtext-color: #d5d5d5;
|
||||
--inactive-color: #f0f0f0;
|
||||
--placeholder-color: #9b9ba5;
|
||||
--time-button: #fc5757;
|
||||
@@ -95,7 +96,7 @@ body {
|
||||
}
|
||||
.dark-mode .detail-button {
|
||||
background-color: var(--inactive-color);
|
||||
color: var(--subtitle-color);
|
||||
color: var(--subtext-color);
|
||||
}
|
||||
|
||||
.job {
|
||||
@@ -188,6 +189,7 @@ body {
|
||||
}
|
||||
|
||||
.user-profile {
|
||||
display: none;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 50%;
|
||||
@@ -362,6 +364,10 @@ body {
|
||||
margin-left: -100px;
|
||||
margin-top: -100px;
|
||||
position: absolute;
|
||||
box-shadow: 0px 2px 4px hsl(0 0% 0% / 25%);
|
||||
animation: border-angle-rotate 2s infinite linear;
|
||||
border: 0.5rem solid transparent;
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.userinfo_dialog {
|
||||
@@ -374,6 +380,10 @@ body {
|
||||
position: absolute;
|
||||
margin: auto 0;
|
||||
transform: translate(-50%, -50%);
|
||||
box-shadow: 0px 2px 4px hsl(0 0% 0% / 25%);
|
||||
animation: border-angle-rotate 2s infinite linear;
|
||||
border: 0.5rem solid transparent;
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.userinfo_dialog > div > .alert-inline {
|
||||
@@ -389,12 +399,13 @@ body {
|
||||
}
|
||||
|
||||
body > div > div.userinfo_dialog > div > div > div {
|
||||
display: inline-flex;
|
||||
display: inline-grid;
|
||||
grid-template-columns: 20% 80%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#username {
|
||||
padding: 11px;
|
||||
padding: 13px;
|
||||
}
|
||||
|
||||
|
||||
@@ -437,8 +448,12 @@ body > div > div.userinfo_dialog > div > div > div {
|
||||
color: var(--body-color)
|
||||
}
|
||||
|
||||
#username {
|
||||
/*width: 64px;*/
|
||||
}
|
||||
|
||||
body > div > div.userinfo_dialog > div > div > div input {
|
||||
width: 85%;
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
display: block;
|
||||
border-radius: 8px 8px 8px 8px;
|
||||
@@ -468,7 +483,7 @@ body > div > div.userinfo_dialog > div > div > div input {
|
||||
border-radius: 6px;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
margin-top: 14px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.job-wrapper {
|
||||
@@ -598,7 +613,7 @@ body > div > div.userinfo_dialog > div > div > div input {
|
||||
padding-top: 20px;
|
||||
/*padding-right: 80px;*/
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
grid-template-columns: repeat(6, 1fr);
|
||||
grid-column-gap: 25px;
|
||||
grid-row-gap: 25px;
|
||||
-webkit-animation: slideY .6s both;
|
||||
@@ -637,18 +652,51 @@ body > div > div.userinfo_dialog > div > div > div input {
|
||||
}
|
||||
}
|
||||
|
||||
@property --border-angle {
|
||||
syntax: "<angle>";
|
||||
initial-value: 0deg;
|
||||
inherits: false;
|
||||
}
|
||||
|
||||
|
||||
@keyframes border-angle-rotate {
|
||||
from { --border-angle: 0deg; }
|
||||
to { --border-angle: 360deg; }
|
||||
}
|
||||
|
||||
.rainbow {
|
||||
background: linear-gradient(var(--header-bg-color), var(--header-bg-color)) padding-box,
|
||||
conic-gradient(
|
||||
from var(--border-angle),
|
||||
oklch(100% 100% 0deg),
|
||||
oklch(100% 100% 45deg),
|
||||
oklch(100% 100% 90deg),
|
||||
oklch(100% 100% 135deg),
|
||||
oklch(100% 100% 180deg),
|
||||
oklch(100% 100% 225deg),
|
||||
oklch(100% 100% 270deg),
|
||||
oklch(100% 100% 315deg),
|
||||
oklch(100% 100% 360deg)
|
||||
)
|
||||
border-box;
|
||||
}
|
||||
|
||||
.job-card {
|
||||
padding: 20px 16px;
|
||||
background-color: var(--header-bg-color);
|
||||
border-radius: 8px;
|
||||
border-radius: 16px;
|
||||
cursor: pointer;
|
||||
-webkit-transition: .2s;
|
||||
transition: .2s;
|
||||
box-shadow: 0px 2px 4px hsl(0 0% 0% / 25%);
|
||||
animation: border-angle-rotate 2s infinite linear;
|
||||
border: 0.5rem solid transparent;
|
||||
}
|
||||
.job-card:hover {
|
||||
-webkit-transform: scale(1.02);
|
||||
transform: scale(1.02);
|
||||
}
|
||||
|
||||
.job-card svg {
|
||||
width: 46px;
|
||||
padding: 10px;
|
||||
@@ -713,13 +761,22 @@ body > div > div.userinfo_dialog > div > div > div input {
|
||||
padding: 6px 8px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.detail-button + .detail-button {
|
||||
margin-left: 4px;
|
||||
/*.detail-button + .detail-button {*/
|
||||
/* margin-left: 4px;*/
|
||||
/*}*/
|
||||
|
||||
.job-detail-buttons {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-column-gap: 10px;
|
||||
grid-row-gap: 4px;
|
||||
}
|
||||
|
||||
.job-card-buttons {
|
||||
display: -webkit-box;
|
||||
display: flex;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-column-gap: 10px;
|
||||
grid-row-gap: 25px;
|
||||
-webkit-box-align: center;
|
||||
align-items: center;
|
||||
-webkit-box-pack: justify;
|
||||
@@ -739,14 +796,15 @@ body > div > div.userinfo_dialog > div > div > div input {
|
||||
.card-buttons,
|
||||
.card-buttons-msg {
|
||||
padding: 10px;
|
||||
width: 100%;
|
||||
min-width: 46%;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.card-buttons {
|
||||
margin-right: 12px;
|
||||
}
|
||||
/*.card-buttons {*/
|
||||
/* margin-right: 4%;*/
|
||||
/* margin-left: 4%;*/
|
||||
/*}*/
|
||||
.card-buttons-msg {
|
||||
background-color: var(--inactive-color);
|
||||
color: var(--subtitle-color);
|
||||
|
||||
Reference in New Issue
Block a user