
--- client/ckeditor/build/ckeditor.js
+++ client/ckeditor/build/ckeditor.js
... | ... | @@ -4297,7 +4297,7 @@ |
4297 | 4297 |
var a = s()(o()); |
4298 | 4298 |
a.push([ |
4299 | 4299 |
t.id, |
4300 |
- ".ck-hidden{display:none!important}:root{--ck-z-default:1;--ck-z-panel:calc(var(--ck-z-default) + 999);--ck-z-dialog:9999}.ck-transitions-disabled,.ck-transitions-disabled *{transition:none!important}:root{--ck-powered-by-line-height:10px;--ck-powered-by-padding-vertical:2px;--ck-powered-by-padding-horizontal:4px;--ck-powered-by-text-color:#4f4f4f;--ck-powered-by-border-radius:var(--ck-border-radius);--ck-powered-by-background:#fff;--ck-powered-by-border-color:var(--ck-color-focus-border)}.ck.ck-balloon-panel.ck-powered-by-balloon{--ck-border-radius:var(--ck-powered-by-border-radius);background:var(--ck-powered-by-background);box-shadow:none;min-height:unset;z-index:calc(var(--ck-z-panel) - 1)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by{line-height:var(--ck-powered-by-line-height)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by a{align-items:center;cursor:pointer;display:flex;filter:grayscale(80%);line-height:var(--ck-powered-by-line-height);opacity:.66;padding:var(--ck-powered-by-padding-vertical) var(--ck-powered-by-padding-horizontal)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-powered-by__label{color:var(--ck-powered-by-text-color);cursor:pointer;font-size:7.5px;font-weight:700;letter-spacing:-.2px;line-height:normal;margin-right:4px;padding-left:2px;text-transform:uppercase}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-icon{cursor:pointer;display:block}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by:hover a{filter:grayscale(0);opacity:1}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_inside]{border-color:transparent}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_border]{border:var(--ck-focus-ring);border-color:var(--ck-powered-by-border-color)}:root{--ck-color-base-foreground:#fafafa;--ck-color-base-background:#fff;--ck-color-base-border:#ccced1;--ck-color-base-action:#53a336;--ck-color-base-focus:#6cb5f9;--ck-color-base-text:#333;--ck-color-base-active:#2977ff;--ck-color-base-active-focus:#0d65ff;--ck-color-base-error:#db3700;--ck-color-focus-border-coordinates:218,81.8%,56.9%;--ck-color-focus-border:hsl(var(--ck-color-focus-border-coordinates));--ck-color-focus-outer-shadow:#cae1fc;--ck-color-focus-disabled-shadow:rgba(119,186,248,.3);--ck-color-focus-error-shadow:rgba(255,64,31,.3);--ck-color-text:var(--ck-color-base-text);--ck-color-shadow-drop:rgba(0,0,0,.15);--ck-color-shadow-drop-active:rgba(0,0,0,.2);--ck-color-shadow-inner:rgba(0,0,0,.1);--ck-color-button-default-background:transparent;--ck-color-button-default-hover-background:#f0f0f0;--ck-color-button-default-active-background:#f0f0f0;--ck-color-button-default-disabled-background:transparent;--ck-color-button-on-background:#f0f7ff;--ck-color-button-on-hover-background:#dbecff;--ck-color-button-on-active-background:#dbecff;--ck-color-button-on-disabled-background:#f0f2f4;--ck-color-button-on-color:#2977ff;--ck-color-button-action-background:var(--ck-color-base-action);--ck-color-button-action-hover-background:#4d9d30;--ck-color-button-action-active-background:#4d9d30;--ck-color-button-action-disabled-background:#7ec365;--ck-color-button-action-text:var(--ck-color-base-background);--ck-color-button-save:#008a00;--ck-color-button-cancel:#db3700;--ck-color-switch-button-off-background:#939393;--ck-color-switch-button-off-hover-background:#7d7d7d;--ck-color-switch-button-on-background:var(--ck-color-button-action-background);--ck-color-switch-button-on-hover-background:#4d9d30;--ck-color-switch-button-inner-background:var(--ck-color-base-background);--ck-color-switch-button-inner-shadow:rgba(0,0,0,.1);--ck-color-dropdown-panel-background:var(--ck-color-base-background);--ck-color-dropdown-panel-border:var(--ck-color-base-border);--ck-color-dialog-background:var(--ck-custom-background);--ck-color-dialog-form-header-border:var(--ck-custom-border);--ck-color-input-background:var(--ck-color-base-background);--ck-color-input-border:var(--ck-color-base-border);--ck-color-input-error-border:var(--ck-color-base-error);--ck-color-input-text:var(--ck-color-base-text);--ck-color-input-disabled-background:#f2f2f2;--ck-color-input-disabled-border:var(--ck-color-base-border);--ck-color-input-disabled-text:#757575;--ck-color-list-background:var(--ck-color-base-background);--ck-color-list-button-hover-background:var(--ck-color-button-default-hover-background);--ck-color-list-button-on-background:var(--ck-color-button-on-color);--ck-color-list-button-on-background-focus:var(--ck-color-button-on-color);--ck-color-list-button-on-text:var(--ck-color-base-background);--ck-color-panel-background:var(--ck-color-base-background);--ck-color-panel-border:var(--ck-color-base-border);--ck-color-toolbar-background:var(--ck-color-base-background);--ck-color-toolbar-border:var(--ck-color-base-border);--ck-color-tooltip-background:var(--ck-color-base-text);--ck-color-tooltip-text:var(--ck-color-base-background);--ck-color-engine-placeholder-text:#707070;--ck-color-upload-bar-background:#6cb5f9;--ck-color-link-default:#0000f0;--ck-color-link-selected-background:rgba(31,176,255,.1);--ck-color-link-fake-selection:rgba(31,176,255,.3);--ck-color-highlight-background:#ff0;--ck-color-light-red:#fcc;--ck-disabled-opacity:.5;--ck-focus-outer-shadow-geometry:0 0 0 3px;--ck-focus-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-outer-shadow);--ck-focus-disabled-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-disabled-shadow);--ck-focus-error-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-error-shadow);--ck-focus-ring:1px solid var(--ck-color-focus-border);--ck-font-size-base:13px;--ck-line-height-base:1.84615;--ck-font-face:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;--ck-font-size-tiny:0.7em;--ck-font-size-small:0.75em;--ck-font-size-normal:1em;--ck-font-size-big:1.4em;--ck-font-size-large:1.8em;--ck-ui-component-min-height:2.3em}.ck-reset_all :not(.ck-reset_all-excluded *),.ck.ck-reset,.ck.ck-reset_all{word-wrap:break-word;background:transparent;border:0;box-sizing:border-box;height:auto;margin:0;padding:0;position:static;text-decoration:none;transition:none;vertical-align:middle;width:auto}.ck-reset_all :not(.ck-reset_all-excluded *),.ck.ck-reset_all{border-collapse:collapse;color:var(--ck-color-text);cursor:auto;float:none;font:normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);text-align:left;white-space:nowrap}.ck-reset_all .ck-rtl :not(.ck-reset_all-excluded *){text-align:right}.ck-reset_all iframe:not(.ck-reset_all-excluded *){vertical-align:inherit}.ck-reset_all textarea:not(.ck-reset_all-excluded *){white-space:pre-wrap}.ck-reset_all input[type=password]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text]:not(.ck-reset_all-excluded *),.ck-reset_all textarea:not(.ck-reset_all-excluded *){cursor:text}.ck-reset_all input[type=password][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all textarea[disabled]:not(.ck-reset_all-excluded *){cursor:default}.ck-reset_all fieldset:not(.ck-reset_all-excluded *){border:2px groove #dfdee3;padding:10px}.ck-reset_all button:not(.ck-reset_all-excluded *)::-moz-focus-inner{border:0;padding:0}.ck[dir=rtl],.ck[dir=rtl] .ck{text-align:right}:root{--ck-border-radius:2px;--ck-inner-shadow:2px 2px 3px var(--ck-color-shadow-inner) inset;--ck-drop-shadow:0 1px 2px 1px var(--ck-color-shadow-drop);--ck-drop-shadow-active:0 3px 6px 1px var(--ck-color-shadow-drop-active);--ck-spacing-unit:0.6em;--ck-spacing-large:calc(var(--ck-spacing-unit)*1.5);--ck-spacing-standard:var(--ck-spacing-unit);--ck-spacing-medium:calc(var(--ck-spacing-unit)*0.8);--ck-spacing-small:calc(var(--ck-spacing-unit)*0.5);--ck-spacing-tiny:calc(var(--ck-spacing-unit)*0.3);--ck-spacing-extra-tiny:calc(var(--ck-spacing-unit)*0.16)}", |
|
4300 |
+ ".ck-hidden{display:none!important}:root{--ck-z-default:1;--ck-z-panel:calc(var(--ck-z-default) + 999);--ck-z-dialog:9999}.ck-transitions-disabled,.ck-transitions-disabled *{transition:none!important}:root{--ck-powered-by-line-height:10px;--ck-powered-by-padding-vertical:2px;--ck-powered-by-padding-horizontal:4px;--ck-powered-by-text-color:#4f4f4f;--ck-powered-by-border-radius:var(--ck-border-radius);--ck-powered-by-background:#fff;--ck-powered-by-border-color:var(--ck-color-focus-border)}.ck.ck-balloon-panel.ck-powered-by-balloon{--ck-border-radius:var(--ck-powered-by-border-radius);background:var(--ck-powered-by-background);box-shadow:none;min-height:unset;z-index:calc(var(--ck-z-panel) - 1)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by{line-height:var(--ck-powered-by-line-height)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by a{align-items:center;cursor:pointer;display:flex;filter:grayscale(80%);line-height:var(--ck-powered-by-line-height);opacity:.66;padding:var(--ck-powered-by-padding-vertical) var(--ck-powered-by-padding-horizontal)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-powered-by__label{color:var(--ck-powered-by-text-color);cursor:pointer;font-size:7.5px;font-weight:700;letter-spacing:-.2px;line-height:normal;margin-right:4px;padding-left:2px;text-transform:uppercase}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-icon{cursor:pointer;display:block}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by:hover a{filter:grayscale(0);opacity:1}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_inside]{border-color:transparent}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_border]{border:var(--ck-focus-ring);border-color:var(--ck-powered-by-border-color)}:root{--ck-color-base-foreground:#fafafa;--ck-color-base-background:#fff;--ck-color-base-border:#ccced1;--ck-color-base-action:#53a336;--ck-color-base-focus:#6cb5f9;--ck-color-base-text:#333;--ck-color-base-active:#2977ff;--ck-color-base-active-focus:#0d65ff;--ck-color-base-error:#db3700;--ck-color-focus-border-coordinates:218,81.8%,56.9%;--ck-color-focus-border:hsl(var(--ck-color-focus-border-coordinates));--ck-color-focus-outer-shadow:#cae1fc;--ck-color-focus-disabled-shadow:rgba(119,186,248,.3);--ck-color-focus-error-shadow:rgba(255,64,31,.3);--ck-color-text:var(--ck-color-base-text);--ck-color-shadow-drop:rgba(0,0,0,.15);--ck-color-shadow-drop-active:rgba(0,0,0,.2);--ck-color-shadow-inner:rgba(0,0,0,.1);--ck-color-button-default-background:transparent;--ck-color-button-default-hover-background:#f0f0f0;--ck-color-button-default-active-background:#f0f0f0;--ck-color-button-default-disabled-background:transparent;--ck-color-button-on-background:#f0f7ff;--ck-color-button-on-hover-background:#dbecff;--ck-color-button-on-active-background:#dbecff;--ck-color-button-on-disabled-background:#f0f2f4;--ck-color-button-on-color:#2977ff;--ck-color-button-action-background:var(--ck-color-base-action);--ck-color-button-action-hover-background:#4d9d30;--ck-color-button-action-active-background:#4d9d30;--ck-color-button-action-disabled-background:#7ec365;--ck-color-button-action-text:var(--ck-color-base-background);--ck-color-button-save:#008a00;--ck-color-button-cancel:#db3700;--ck-color-switch-button-off-background:#939393;--ck-color-switch-button-off-hover-background:#7d7d7d;--ck-color-switch-button-on-background:var(--ck-color-button-action-background);--ck-color-switch-button-on-hover-background:#4d9d30;--ck-color-switch-button-inner-background:var(--ck-color-base-background);--ck-color-switch-button-inner-shadow:rgba(0,0,0,.1);--ck-color-dropdown-panel-background:var(--ck-color-base-background);--ck-color-dropdown-panel-border:var(--ck-color-base-border);--ck-color-dialog-background:var(--ck-custom-background);--ck-color-dialog-form-header-border:var(--ck-custom-border);--ck-color-input-background:var(--ck-color-base-background);--ck-color-input-border:var(--ck-color-base-border);--ck-color-input-error-border:var(--ck-color-base-error);--ck-color-input-text:var(--ck-color-base-text);--ck-color-input-disabled-background:#f2f2f2;--ck-color-input-disabled-border:var(--ck-color-base-border);--ck-color-input-disabled-text:#757575;--ck-color-list-background:var(--ck-color-base-background);--ck-color-list-button-hover-background:var(--ck-color-button-default-hover-background);--ck-color-list-button-on-background:var(--ck-color-button-on-color);--ck-color-list-button-on-background-focus:var(--ck-color-button-on-color);--ck-color-list-button-on-text:var(--ck-color-base-background);--ck-color-panel-background:var(--ck-color-base-background);--ck-color-panel-border:var(--ck-color-base-border);--ck-color-toolbar-background:var(--ck-color-base-background);--ck-color-toolbar-border:var(--ck-color-base-border);--ck-color-tooltip-background:var(--ck-color-base-text);--ck-color-tooltip-text:var(--ck-color-base-background);--ck-color-engine-placeholder-text:#707070;--ck-color-upload-bar-background:#6cb5f9;--ck-color-link-default:#0000f0;--ck-color-link-selected-background:rgba(31,176,255,.1);--ck-color-link-fake-selection:rgba(31,176,255,.3);--ck-color-highlight-background:#ff0;--ck-color-light-red:#fcc;--ck-disabled-opacity:.5;--ck-focus-outer-shadow-geometry:0 0 0 3px;--ck-focus-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-outer-shadow);--ck-focus-disabled-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-disabled-shadow);--ck-focus-error-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-error-shadow);--ck-focus-ring:1px solid var(--ck-color-focus-border);--ck-font-size-base:13px;--ck-line-height-base:1.84615;--ck-font-face:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;--ck-font-size-tiny:0.7em;--ck-font-size-small:0.75em;--ck-font-size-normal:1em;--ck-font-size-big:1.4em;--ck-font-size-large:1.8em;--ck-ui-component-min-height:2.3em}.ck-reset_all :not(.ck-reset_all-excluded *),.ck.ck-reset,.ck.ck-reset_all{word-wrap:break-word;background:transparent;border:0;box-sizing:border-box;margin:0;padding:0;position:static;text-decoration:none;transition:none;vertical-align:middle;width:auto}.ck-reset_all :not(.ck-reset_all-excluded *),.ck.ck-reset_all{border-collapse:collapse;color:var(--ck-color-text);cursor:auto;float:none;font:normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);text-align:left;white-space:nowrap}.ck-reset_all .ck-rtl :not(.ck-reset_all-excluded *){text-align:right}.ck-reset_all iframe:not(.ck-reset_all-excluded *){vertical-align:inherit}.ck-reset_all textarea:not(.ck-reset_all-excluded *){white-space:pre-wrap}.ck-reset_all input[type=password]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text]:not(.ck-reset_all-excluded *),.ck-reset_all textarea:not(.ck-reset_all-excluded *){cursor:text}.ck-reset_all input[type=password][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all textarea[disabled]:not(.ck-reset_all-excluded *){cursor:default}.ck-reset_all fieldset:not(.ck-reset_all-excluded *){border:2px groove #dfdee3;padding:10px}.ck-reset_all button:not(.ck-reset_all-excluded *)::-moz-focus-inner{border:0;padding:0}.ck[dir=rtl],.ck[dir=rtl] .ck{text-align:right}:root{--ck-border-radius:2px;--ck-inner-shadow:2px 2px 3px var(--ck-color-shadow-inner) inset;--ck-drop-shadow:0 1px 2px 1px var(--ck-color-shadow-drop);--ck-drop-shadow-active:0 3px 6px 1px var(--ck-color-shadow-drop-active);--ck-spacing-unit:0.6em;--ck-spacing-large:calc(var(--ck-spacing-unit)*1.5);--ck-spacing-standard:var(--ck-spacing-unit);--ck-spacing-medium:calc(var(--ck-spacing-unit)*0.8);--ck-spacing-small:calc(var(--ck-spacing-unit)*0.5);--ck-spacing-tiny:calc(var(--ck-spacing-unit)*0.3);--ck-spacing-extra-tiny:calc(var(--ck-spacing-unit)*0.16)}", |
|
4301 | 4301 |
"", |
4302 | 4302 |
{ |
4303 | 4303 |
version: 3, |
... | ... | @@ -4665,8 +4665,8 @@ |
4665 | 4665 |
var o = n |
4666 | 4666 |
? "" |
4667 | 4667 |
: i.media |
4668 |
- ? "@media ".concat(i.media, " {").concat(i.css, "}") |
|
4669 |
- : i.css; |
|
4668 |
+ ? "@media ".concat(i.media, " {").concat(i.css, "}") |
|
4669 |
+ : i.css; |
|
4670 | 4670 |
if (t.styleSheet) { |
4671 | 4671 |
t.styleSheet.cssText = d(e, o); |
4672 | 4672 |
} else { |
... | ... | @@ -4902,7 +4902,7 @@ |
4902 | 4902 |
let t = false; |
4903 | 4903 |
try { |
4904 | 4904 |
t = "ć".search(new RegExp("[\\p{L}]", "u")) === 0; |
4905 |
- } catch (t) {} |
|
4905 |
+ } catch (t) { } |
|
4906 | 4906 |
return t; |
4907 | 4907 |
} |
4908 | 4908 |
function p() { |
... | ... | @@ -5813,7 +5813,7 @@ |
5813 | 5813 |
try { |
5814 | 5814 |
t[Vt] = undefined; |
5815 | 5815 |
var i = true; |
5816 |
- } catch (t) {} |
|
5816 |
+ } catch (t) { } |
|
5817 | 5817 |
var o = Rt.call(t); |
5818 | 5818 |
if (i) { |
5819 | 5819 |
if (e) { |
... | ... | @@ -6017,10 +6017,10 @@ |
6017 | 6017 |
if (t != null) { |
6018 | 6018 |
try { |
6019 | 6019 |
return tn.call(t); |
6020 |
- } catch (t) {} |
|
6020 |
+ } catch (t) { } |
|
6021 | 6021 |
try { |
6022 | 6022 |
return t + ""; |
6023 |
- } catch (t) {} |
|
6023 |
+ } catch (t) { } |
|
6024 | 6024 |
} |
6025 | 6025 |
return ""; |
6026 | 6026 |
} |
... | ... | @@ -6033,14 +6033,14 @@ |
6033 | 6033 |
var ln = an.hasOwnProperty; |
6034 | 6034 |
var dn = RegExp( |
6035 | 6035 |
"^" + |
6036 |
- cn |
|
6037 |
- .call(ln) |
|
6038 |
- .replace(on, "\\$&") |
|
6039 |
- .replace( |
|
6040 |
- /hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, |
|
6041 |
- "$1.*?" |
|
6042 |
- ) + |
|
6043 |
- "$" |
|
6036 |
+ cn |
|
6037 |
+ .call(ln) |
|
6038 |
+ .replace(on, "\\$&") |
|
6039 |
+ .replace( |
|
6040 |
+ /hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, |
|
6041 |
+ "$1.*?" |
|
6042 |
+ ) + |
|
6043 |
+ "$" |
|
6044 | 6044 |
); |
6045 | 6045 |
function un(t) { |
6046 | 6046 |
if (!st(t) || Je(t)) { |
... | ... | @@ -6217,7 +6217,7 @@ |
6217 | 6217 |
var t = pn(Object, "defineProperty"); |
6218 | 6218 |
t({}, "", {}); |
6219 | 6219 |
return t; |
6220 |
- } catch (t) {} |
|
6220 |
+ } catch (t) { } |
|
6221 | 6221 |
})(); |
6222 | 6222 |
const li = ci; |
6223 | 6223 |
function di(t, e, n) { |
... | ... | @@ -6286,8 +6286,8 @@ |
6286 | 6286 |
) |
6287 | 6287 |
? Ci |
6288 | 6288 |
: function (t) { |
6289 |
- return Xt(t) && yi.call(t, "callee") && !xi.call(t, "callee"); |
|
6290 |
- }; |
|
6289 |
+ return Xt(t) && yi.call(t, "callee") && !xi.call(t, "callee"); |
|
6290 |
+ }; |
|
6291 | 6291 |
const Di = Ei; |
6292 | 6292 |
function Si() { |
6293 | 6293 |
return false; |
... | ... | @@ -6355,7 +6355,7 @@ |
6355 | 6355 |
fo[ho] = |
6356 | 6356 |
fo[mo] = |
6357 | 6357 |
fo[go] = |
6358 |
- true; |
|
6358 |
+ true; |
|
6359 | 6359 |
fo[$i] = |
6360 | 6360 |
fo[qi] = |
6361 | 6361 |
fo[io] = |
... | ... | @@ -6371,7 +6371,7 @@ |
6371 | 6371 |
fo[to] = |
6372 | 6372 |
fo[eo] = |
6373 | 6373 |
fo[no] = |
6374 |
- false; |
|
6374 |
+ false; |
|
6375 | 6375 |
function po(t) { |
6376 | 6376 |
return Xt(t) && Ui(t.length) && !!fo[Yt(t)]; |
6377 | 6377 |
} |
... | ... | @@ -6395,7 +6395,7 @@ |
6395 | 6395 |
return t; |
6396 | 6396 |
} |
6397 | 6397 |
return vo && vo.binding && vo.binding("util"); |
6398 |
- } catch (t) {} |
|
6398 |
+ } catch (t) { } |
|
6399 | 6399 |
})(); |
6400 | 6400 |
const xo = yo; |
6401 | 6401 |
var Eo = xo && xo.isTypedArray; |
... | ... | @@ -6550,14 +6550,14 @@ |
6550 | 6550 |
var Ar = !wr |
6551 | 6551 |
? pr |
6552 | 6552 |
: function (t) { |
6553 |
- if (t == null) { |
|
6554 |
- return []; |
|
6555 |
- } |
|
6556 |
- t = Object(t); |
|
6557 |
- return gr(wr(t), function (e) { |
|
6558 |
- return br.call(t, e); |
|
6559 |
- }); |
|
6560 |
- }; |
|
6553 |
+ if (t == null) { |
|
6554 |
+ return []; |
|
6555 |
+ } |
|
6556 |
+ t = Object(t); |
|
6557 |
+ return gr(wr(t), function (e) { |
|
6558 |
+ return br.call(t, e); |
|
6559 |
+ }); |
|
6560 |
+ }; |
|
6561 | 6561 |
const _r = Ar; |
6562 | 6562 |
function Cr(t, e) { |
6563 | 6563 |
return ki(t, _r(t), e); |
... | ... | @@ -6577,13 +6577,13 @@ |
6577 | 6577 |
var Dr = !Er |
6578 | 6578 |
? pr |
6579 | 6579 |
: function (t) { |
6580 |
- var e = []; |
|
6581 |
- while (t) { |
|
6582 |
- xr(e, _r(t)); |
|
6583 |
- t = ae(t); |
|
6584 |
- } |
|
6585 |
- return e; |
|
6586 |
- }; |
|
6580 |
+ var e = []; |
|
6581 |
+ while (t) { |
|
6582 |
+ xr(e, _r(t)); |
|
6583 |
+ t = ae(t); |
|
6584 |
+ } |
|
6585 |
+ return e; |
|
6586 |
+ }; |
|
6587 | 6587 |
const Sr = Dr; |
6588 | 6588 |
function Tr(t, e) { |
6589 | 6589 |
return ki(t, Sr(t), e); |
... | ... | @@ -6749,7 +6749,7 @@ |
6749 | 6749 |
const Us = Hs; |
6750 | 6750 |
var $s = Object.create; |
6751 | 6751 |
var qs = (function () { |
6752 |
- function t() {} |
|
6752 |
+ function t() { } |
|
6753 | 6753 |
return function (e) { |
6754 | 6754 |
if (!st(e)) { |
6755 | 6755 |
return {}; |
... | ... | @@ -6836,7 +6836,7 @@ |
6836 | 6836 |
Pa[La] = |
6837 | 6837 |
Pa[Na] = |
6838 | 6838 |
Pa[za] = |
6839 |
- true; |
|
6839 |
+ true; |
|
6840 | 6840 |
Pa[ga] = Pa[fa] = Pa[ya] = false; |
6841 | 6841 |
function Ra(t, e, n, i, o, r) { |
6842 | 6842 |
var s, |
... | ... | @@ -8170,13 +8170,13 @@ |
8170 | 8170 |
var Ml = !li |
8171 | 8171 |
? vl |
8172 | 8172 |
: function (t, e) { |
8173 |
- return li(t, "toString", { |
|
8174 |
- configurable: true, |
|
8175 |
- enumerable: false, |
|
8176 |
- value: Bl(e), |
|
8177 |
- writable: true, |
|
8178 |
- }); |
|
8179 |
- }; |
|
8173 |
+ return li(t, "toString", { |
|
8174 |
+ configurable: true, |
|
8175 |
+ enumerable: false, |
|
8176 |
+ value: Bl(e), |
|
8177 |
+ writable: true, |
|
8178 |
+ }); |
|
8179 |
+ }; |
|
8180 | 8180 |
const Il = Ml; |
8181 | 8181 |
var Ll = 800, |
8182 | 8182 |
Nl = 16; |
... | ... | @@ -8313,8 +8313,8 @@ |
8313 | 8313 |
get language() { |
8314 | 8314 |
console.warn( |
8315 | 8315 |
"locale-deprecated-language-property: " + |
8316 |
- "The Locale#language property has been deprecated and will be removed in the near future. " + |
|
8317 |
- "Please use #uiLanguage and #contentLanguage properties instead." |
|
8316 |
+ "The Locale#language property has been deprecated and will be removed in the near future. " + |
|
8317 |
+ "Please use #uiLanguage and #contentLanguage properties instead." |
|
8318 | 8318 |
); |
8319 | 8319 |
return this.uiLanguage; |
8320 | 8320 |
} |
... | ... | @@ -9672,7 +9672,7 @@ |
9672 | 9672 |
super(...arguments); |
9673 | 9673 |
this._childCommandsDefinitions = []; |
9674 | 9674 |
} |
9675 |
- refresh() {} |
|
9675 |
+ refresh() { } |
|
9676 | 9676 |
execute(...t) { |
9677 | 9677 |
const e = this._getFirstEnabledCommand(); |
9678 | 9678 |
return !!e && e.execute(t); |
... | ... | @@ -10546,7 +10546,7 @@ |
10546 | 10546 |
return Fu(t, n, (t) => e.getAttribute(t)); |
10547 | 10547 |
} |
10548 | 10548 |
function qu(t, e) { |
10549 |
- return Fu(t, e.getClassNames(), () => {}); |
|
10549 |
+ return Fu(t, e.getClassNames(), () => { }); |
|
10550 | 10550 |
} |
10551 | 10551 |
function Wu(t, e) { |
10552 | 10552 |
return Fu(t, e.getStyleNames(true), (t) => e.getStyle(t)); |
... | ... | @@ -12712,7 +12712,7 @@ |
12712 | 12712 |
} |
12713 | 12713 |
return 0; |
12714 | 12714 |
} |
12715 |
- render(t, e) {} |
|
12715 |
+ render(t, e) { } |
|
12716 | 12716 |
} |
12717 | 12717 |
Sm.prototype.is = function (t, e) { |
12718 | 12718 |
if (!e) { |
... | ... | @@ -15188,7 +15188,7 @@ |
15188 | 15188 |
var Ng = /\s/; |
15189 | 15189 |
function zg(t) { |
15190 | 15190 |
var e = t.length; |
15191 |
- while (e-- && Ng.test(t.charAt(e))) {} |
|
15191 |
+ while (e-- && Ng.test(t.charAt(e))) { } |
|
15192 | 15192 |
return e; |
15193 | 15193 |
} |
15194 | 15194 |
const Pg = zg; |
... | ... | @@ -15221,8 +15221,8 @@ |
15221 | 15221 |
return n || Ug.test(t) |
15222 | 15222 |
? $g(t.slice(2), n ? 2 : 8) |
15223 | 15223 |
: jg.test(t) |
15224 |
- ? Fg |
|
15225 |
- : +t; |
|
15224 |
+ ? Fg |
|
15225 |
+ : +t; |
|
15226 | 15226 |
} |
15227 | 15227 |
const Wg = qg; |
15228 | 15228 |
var Gg = "Expected a function"; |
... | ... | @@ -15354,7 +15354,7 @@ |
15354 | 15354 |
{ priority: "lowest" } |
15355 | 15355 |
); |
15356 | 15356 |
} |
15357 |
- stopObserving() {} |
|
15357 |
+ stopObserving() { } |
|
15358 | 15358 |
destroy() { |
15359 | 15359 |
super.destroy(); |
15360 | 15360 |
this._fireSelectionChangeDoneDebounced.cancel(); |
... | ... | @@ -15804,7 +15804,7 @@ |
15804 | 15804 |
this._isFocusChanging = true; |
15805 | 15805 |
this._renderTimeoutId = setTimeout(() => { |
15806 | 15806 |
this.flush(); |
15807 |
- t.change(() => {}); |
|
15807 |
+ t.change(() => { }); |
|
15808 | 15808 |
}, 50); |
15809 | 15809 |
}); |
15810 | 15810 |
e.on("blur", (n, i) => { |
... | ... | @@ -15812,7 +15812,7 @@ |
15812 | 15812 |
if (o === null || o === i.target) { |
15813 | 15813 |
e.isFocused = false; |
15814 | 15814 |
this._isFocusChanging = false; |
15815 |
- t.change(() => {}); |
|
15815 |
+ t.change(() => { }); |
|
15816 | 15816 |
} |
15817 | 15817 |
}); |
15818 | 15818 |
} |
... | ... | @@ -15901,7 +15901,7 @@ |
15901 | 15901 |
this._fireSelectionChangeDoneDebounced.cancel(); |
15902 | 15902 |
this._documentIsSelectingInactivityTimeoutDebounced.cancel(); |
15903 | 15903 |
} |
15904 |
- _reportInfiniteLoop() {} |
|
15904 |
+ _reportInfiniteLoop() { } |
|
15905 | 15905 |
_handleSelectionChange(t, e) { |
15906 | 15906 |
if (!this.isEnabled) { |
15907 | 15907 |
return; |
... | ... | @@ -16128,8 +16128,8 @@ |
16128 | 16128 |
} |
16129 | 16129 |
}); |
16130 | 16130 |
} |
16131 |
- observe() {} |
|
16132 |
- stopObserving() {} |
|
16131 |
+ observe() { } |
|
16132 |
+ stopObserving() { } |
|
16133 | 16133 |
} |
16134 | 16134 |
class cp extends Eg { |
16135 | 16135 |
constructor(t) { |
... | ... | @@ -16146,8 +16146,8 @@ |
16146 | 16146 |
} |
16147 | 16147 |
}); |
16148 | 16148 |
} |
16149 |
- observe() {} |
|
16150 |
- stopObserving() {} |
|
16149 |
+ observe() { } |
|
16150 |
+ stopObserving() { } |
|
16151 | 16151 |
} |
16152 | 16152 |
var lp = 1, |
16153 | 16153 |
dp = 4; |
... | ... | @@ -16364,7 +16364,7 @@ |
16364 | 16364 |
forceRender() { |
16365 | 16365 |
this._hasChangedSinceTheLastRendering = true; |
16366 | 16366 |
this.getObserver(ep).flush(); |
16367 |
- this.change(() => {}); |
|
16367 |
+ this.change(() => { }); |
|
16368 | 16368 |
} |
16369 | 16369 |
destroy() { |
16370 | 16370 |
for (const t of this._observers.values()) { |
... | ... | @@ -16397,7 +16397,7 @@ |
16397 | 16397 |
_disableRendering(t) { |
16398 | 16398 |
this._renderingDisabled = t; |
16399 | 16399 |
if (t == false) { |
16400 |
- this.change(() => {}); |
|
16400 |
+ this.change(() => { }); |
|
16401 | 16401 |
} |
16402 | 16402 |
} |
16403 | 16403 |
_render() { |
... | ... | @@ -19679,9 +19679,8 @@ |
19679 | 19679 |
bk(c, e, n, i, o); |
19680 | 19680 |
} |
19681 | 19681 |
function kk(t, e, n, i, o, r) { |
19682 |
- const s = `data-${r.group}-${e ? "start" : "end"}-${ |
|
19683 |
- n ? "before" : "after" |
|
19684 |
- }`; |
|
19682 |
+ const s = `data-${r.group}-${e ? "start" : "end"}-${n ? "before" : "after" |
|
19683 |
+ }`; |
|
19685 | 19684 |
const a = t.hasAttribute(s) ? t.getAttribute(s).split(",") : []; |
19686 | 19685 |
a.unshift(r.name); |
19687 | 19686 |
i.writer.setAttribute(s, a.join(","), t); |
... | ... | @@ -21641,8 +21640,8 @@ |
21641 | 21640 |
if (typeof t == "string" || t.is("documentFragment")) { |
21642 | 21641 |
return { |
21643 | 21642 |
name: typeof t == "string" ? t : "$documentFragment", |
21644 |
- *getAttributeKeys() {}, |
|
21645 |
- getAttribute() {}, |
|
21643 |
+ *getAttributeKeys() { }, |
|
21644 |
+ getAttribute() { }, |
|
21646 | 21645 |
}; |
21647 | 21646 |
} else { |
21648 | 21647 |
return { |
... | ... | @@ -22220,7 +22219,7 @@ |
22220 | 22219 |
this.isDocumentOperation = this.baseVersion !== null; |
22221 | 22220 |
this.batch = null; |
22222 | 22221 |
} |
22223 |
- _validate() {} |
|
22222 |
+ _validate() { } |
|
22224 | 22223 |
toJSON() { |
22225 | 22224 |
const t = Object.assign({}, this); |
22226 | 22225 |
t.__className = this.constructor.className; |
... | ... | @@ -22892,7 +22891,7 @@ |
22892 | 22891 |
getReversed() { |
22893 | 22892 |
return new Cw(this.baseVersion + 1); |
22894 | 22893 |
} |
22895 |
- _execute() {} |
|
22894 |
+ _execute() { } |
|
22896 | 22895 |
static get className() { |
22897 | 22896 |
return "NoOperation"; |
22898 | 22897 |
} |
... | ... | @@ -31558,8 +31557,8 @@ |
31558 | 31557 |
attributes: { class: [e.if("isVertical", "ck-toolbar_vertical")] }, |
31559 | 31558 |
}); |
31560 | 31559 |
} |
31561 |
- render() {} |
|
31562 |
- destroy() {} |
|
31560 |
+ render() { } |
|
31561 |
+ destroy() { } |
|
31563 | 31562 |
} |
31564 | 31563 |
class Tx { |
31565 | 31564 |
constructor(t) { |
... | ... | @@ -32419,8 +32418,8 @@ |
32419 | 32418 |
? o === t |
32420 | 32419 |
? (e - n) / r |
32421 | 32420 |
: o === e |
32422 |
- ? 2 + (n - t) / r |
|
32423 |
- : 4 + (t - e) / r |
|
32421 |
+ ? 2 + (n - t) / r |
|
32422 |
+ : 4 + (t - e) / r |
|
32424 | 32423 |
: 0; |
32425 | 32424 |
return { |
32426 | 32425 |
h: pE(60 * (s < 0 ? s + 6 : s)), |
... | ... | @@ -32498,16 +32497,16 @@ |
32498 | 32497 |
n === 39 |
32499 | 32498 |
? 0.01 |
32500 | 32499 |
: n === 37 |
32501 |
- ? -0.01 |
|
32502 |
- : n === 34 |
|
32503 |
- ? 0.05 |
|
32504 |
- : n === 33 |
|
32505 |
- ? -0.05 |
|
32506 |
- : n === 35 |
|
32507 |
- ? 1 |
|
32508 |
- : n === 36 |
|
32509 |
- ? -1 |
|
32510 |
- : 0, |
|
32500 |
+ ? -0.01 |
|
32501 |
+ : n === 34 |
|
32502 |
+ ? 0.05 |
|
32503 |
+ : n === 33 |
|
32504 |
+ ? -0.05 |
|
32505 |
+ : n === 35 |
|
32506 |
+ ? 1 |
|
32507 |
+ : n === 36 |
|
32508 |
+ ? -1 |
|
32509 |
+ : 0, |
|
32511 | 32510 |
y: n === 40 ? 0.01 : n === 38 ? -0.01 : 0, |
32512 | 32511 |
}, |
32513 | 32512 |
true |
... | ... | @@ -33171,7 +33170,7 @@ |
33171 | 33170 |
if ( |
33172 | 33171 |
this.isVisible && |
33173 | 33172 |
this.focusTracker.focusedElement !== |
33174 |
- this.cancelButtonView.element && |
|
33173 |
+ this.cancelButtonView.element && |
|
33175 | 33174 |
this.colorPickerView.isValid() |
33176 | 33175 |
) { |
33177 | 33176 |
this.fire("execute", { value: this.selectedColor }); |
... | ... | @@ -34908,12 +34907,12 @@ |
34908 | 34907 |
children: [ |
34909 | 34908 |
...(e |
34910 | 34909 |
? [ |
34911 |
- { |
|
34912 |
- tag: "span", |
|
34913 |
- attributes: { class: ["ck", "ck-powered-by__label"] }, |
|
34914 |
- children: [e], |
|
34915 |
- }, |
|
34916 |
- ] |
|
34910 |
+ { |
|
34911 |
+ tag: "span", |
|
34912 |
+ attributes: { class: ["ck", "ck-powered-by__label"] }, |
|
34913 |
+ children: [e], |
|
34914 |
+ }, |
|
34915 |
+ ] |
|
34917 | 34916 |
: []), |
34918 | 34917 |
n, |
34919 | 34918 |
], |
... | ... | @@ -35171,7 +35170,7 @@ |
35171 | 35170 |
get _editableElements() { |
35172 | 35171 |
console.warn( |
35173 | 35172 |
"editor-ui-deprecated-editable-elements: " + |
35174 |
- "The EditorUI#_editableElements property has been deprecated and will be removed in the near future.", |
|
35173 |
+ "The EditorUI#_editableElements property has been deprecated and will be removed in the near future.", |
|
35175 | 35174 |
{ editorUI: this } |
35176 | 35175 |
); |
35177 | 35176 |
return this._editableElementsMap; |
... | ... | @@ -35186,8 +35185,8 @@ |
35186 | 35185 |
if (n) { |
35187 | 35186 |
console.warn( |
35188 | 35187 |
"editor-ui-deprecated-viewport-offset-config: " + |
35189 |
- "The `toolbar.vieportTopOffset` configuration option is deprecated. " + |
|
35190 |
- "It will be removed from future CKEditor versions. Use `ui.viewportOffset.top` instead." |
|
35188 |
+ "The `toolbar.vieportTopOffset` configuration option is deprecated. " + |
|
35189 |
+ "It will be removed from future CKEditor versions. Use `ui.viewportOffset.top` instead." |
|
35191 | 35190 |
); |
35192 | 35191 |
return { top: n }; |
35193 | 35192 |
} |
... | ... | @@ -35975,9 +35974,9 @@ |
35975 | 35974 |
width: e.to("isSticky", (t) => |
35976 | 35975 |
t |
35977 | 35976 |
? ST( |
35978 |
- this._contentPanelPlaceholder.getBoundingClientRect() |
|
35979 |
- .width |
|
35980 |
- ) |
|
35977 |
+ this._contentPanelPlaceholder.getBoundingClientRect() |
|
35978 |
+ .width |
|
35979 |
+ ) |
|
35981 | 35980 |
: null |
35982 | 35981 |
), |
35983 | 35982 |
top: e.to("_stickyTopOffset", (t) => (t ? ST(t) : t)), |
... | ... | @@ -36673,37 +36672,37 @@ |
36673 | 36672 |
const n = a.isSafari && a.isiOS; |
36674 | 36673 |
const i = n |
36675 | 36674 |
? bS({ |
36676 |
- heightOffset: Math.max( |
|
36677 |
- pS.arrowHeightOffset, |
|
36678 |
- Math.round(20 / e.window.visualViewport.scale) |
|
36679 |
- ), |
|
36680 |
- }) |
|
36675 |
+ heightOffset: Math.max( |
|
36676 |
+ pS.arrowHeightOffset, |
|
36677 |
+ Math.round(20 / e.window.visualViewport.scale) |
|
36678 |
+ ), |
|
36679 |
+ }) |
|
36681 | 36680 |
: pS.defaultPositions; |
36682 | 36681 |
return t |
36683 | 36682 |
? [ |
36684 |
- i.northWestArrowSouth, |
|
36685 |
- i.northWestArrowSouthWest, |
|
36686 |
- i.northWestArrowSouthEast, |
|
36687 |
- i.northWestArrowSouthMiddleEast, |
|
36688 |
- i.northWestArrowSouthMiddleWest, |
|
36689 |
- i.southWestArrowNorth, |
|
36690 |
- i.southWestArrowNorthWest, |
|
36691 |
- i.southWestArrowNorthEast, |
|
36692 |
- i.southWestArrowNorthMiddleWest, |
|
36693 |
- i.southWestArrowNorthMiddleEast, |
|
36694 |
- ] |
|
36683 |
+ i.northWestArrowSouth, |
|
36684 |
+ i.northWestArrowSouthWest, |
|
36685 |
+ i.northWestArrowSouthEast, |
|
36686 |
+ i.northWestArrowSouthMiddleEast, |
|
36687 |
+ i.northWestArrowSouthMiddleWest, |
|
36688 |
+ i.southWestArrowNorth, |
|
36689 |
+ i.southWestArrowNorthWest, |
|
36690 |
+ i.southWestArrowNorthEast, |
|
36691 |
+ i.southWestArrowNorthMiddleWest, |
|
36692 |
+ i.southWestArrowNorthMiddleEast, |
|
36693 |
+ ] |
|
36695 | 36694 |
: [ |
36696 |
- i.southEastArrowNorth, |
|
36697 |
- i.southEastArrowNorthEast, |
|
36698 |
- i.southEastArrowNorthWest, |
|
36699 |
- i.southEastArrowNorthMiddleEast, |
|
36700 |
- i.southEastArrowNorthMiddleWest, |
|
36701 |
- i.northEastArrowSouth, |
|
36702 |
- i.northEastArrowSouthEast, |
|
36703 |
- i.northEastArrowSouthWest, |
|
36704 |
- i.northEastArrowSouthMiddleEast, |
|
36705 |
- i.northEastArrowSouthMiddleWest, |
|
36706 |
- ]; |
|
36695 |
+ i.southEastArrowNorth, |
|
36696 |
+ i.southEastArrowNorthEast, |
|
36697 |
+ i.southEastArrowNorthWest, |
|
36698 |
+ i.southEastArrowNorthMiddleEast, |
|
36699 |
+ i.southEastArrowNorthMiddleWest, |
|
36700 |
+ i.northEastArrowSouth, |
|
36701 |
+ i.northEastArrowSouthEast, |
|
36702 |
+ i.northEastArrowSouthWest, |
|
36703 |
+ i.northEastArrowSouthMiddleEast, |
|
36704 |
+ i.northEastArrowSouthMiddleWest, |
|
36705 |
+ ]; |
|
36707 | 36706 |
} |
36708 | 36707 |
} |
36709 | 36708 |
function pB(t, e) { |
... | ... | @@ -38233,7 +38232,7 @@ |
38233 | 38232 |
if (!this._restart) { |
38234 | 38233 |
throw new Error( |
38235 | 38234 |
"The Watchdog class was split into the abstract `Watchdog` class and the `EditorWatchdog` class. " + |
38236 |
- "Please, use `EditorWatchdog` if you have used the `Watchdog` class previously." |
|
38235 |
+ "Please, use `EditorWatchdog` if you have used the `Watchdog` class previously." |
|
38237 | 38236 |
); |
38238 | 38237 |
} |
38239 | 38238 |
} |
... | ... | @@ -38328,7 +38327,7 @@ |
38328 | 38327 |
for (const e of t) { |
38329 | 38328 |
n.push(e); |
38330 | 38329 |
} |
38331 |
- } catch (t) {} |
|
38330 |
+ } catch (t) { } |
|
38332 | 38331 |
} else { |
38333 | 38332 |
for (const e in t) { |
38334 | 38333 |
if (e === "defaultValue") { |
... | ... | @@ -38543,7 +38542,7 @@ |
38543 | 38542 |
console.error( |
38544 | 38543 |
t, |
38545 | 38544 |
"An error happened during restoring editor data. " + |
38546 |
- "Editor will be restored from the previously saved data." |
|
38545 |
+ "Editor will be restored from the previously saved data." |
|
38547 | 38546 |
); |
38548 | 38547 |
} |
38549 | 38548 |
} |
... | ... | @@ -38897,7 +38896,7 @@ |
38897 | 38896 |
? Promise.all(this._queues.values()) |
38898 | 38897 |
: Promise.all([this._queues.get(jM), this._queues.get(t)]); |
38899 | 38898 |
const o = i.then(e); |
38900 |
- const r = o.catch(() => {}); |
|
38899 |
+ const r = o.catch(() => { }); |
|
38901 | 38900 |
this._queues.set(t, r); |
38902 | 38901 |
return o.finally(() => { |
38903 | 38902 |
this._activeActions--; |
... | ... | @@ -39585,8 +39584,8 @@ |
39585 | 39584 |
{ priority: "lowest" } |
39586 | 39585 |
); |
39587 | 39586 |
} |
39588 |
- observe() {} |
|
39589 |
- stopObserving() {} |
|
39587 |
+ observe() { } |
|
39588 |
+ stopObserving() { } |
|
39590 | 39589 |
} |
39591 | 39590 |
class CI extends au { |
39592 | 39591 |
static get pluginName() { |
... | ... | @@ -39845,8 +39844,8 @@ |
39845 | 39844 |
LI(this); |
39846 | 39845 |
} |
39847 | 39846 |
} |
39848 |
- observe() {} |
|
39849 |
- stopObserving() {} |
|
39847 |
+ observe() { } |
|
39848 |
+ stopObserving() { } |
|
39850 | 39849 |
} |
39851 | 39850 |
function LI(t) { |
39852 | 39851 |
const e = t.view; |
... | ... | @@ -41066,8 +41065,8 @@ |
41066 | 41065 |
} |
41067 | 41066 |
}); |
41068 | 41067 |
} |
41069 |
- observe() {} |
|
41070 |
- stopObserving() {} |
|
41068 |
+ observe() { } |
|
41069 |
+ stopObserving() { } |
|
41071 | 41070 |
} |
41072 | 41071 |
class QL extends au { |
41073 | 41072 |
static get pluginName() { |
... | ... | @@ -42557,8 +42556,8 @@ |
42557 | 42556 |
t.push(() => |
42558 | 42557 |
this.isEnabled |
42559 | 42558 |
? n( |
42560 |
- "Press Enter to type after or press Shift + Enter to type before the widget" |
|
42561 |
- ) |
|
42559 |
+ "Press Enter to type after or press Shift + Enter to type before the widget" |
|
42560 |
+ ) |
|
42562 | 42561 |
: "" |
42563 | 42562 |
); |
42564 | 42563 |
} |
... | ... | @@ -44749,7 +44748,7 @@ |
44749 | 44748 |
(t, e) => { |
44750 | 44749 |
this._finalizeDragging( |
44751 | 44750 |
!e.dataTransfer.isCanceled && |
44752 |
- e.dataTransfer.dropEffect == "move" |
|
44751 |
+ e.dataTransfer.dropEffect == "move" |
|
44753 | 44752 |
); |
44754 | 44753 |
}, |
44755 | 44754 |
{ priority: "low" } |
... | ... | @@ -44834,7 +44833,7 @@ |
44834 | 44833 |
if ( |
44835 | 44834 |
this._draggedRange && |
44836 | 44835 |
this._draggingUid != |
44837 |
- n.dataTransfer.getData("application/ckeditor5-dragging-uid") |
|
44836 |
+ n.dataTransfer.getData("application/ckeditor5-dragging-uid") |
|
44838 | 44837 |
) { |
44839 | 44838 |
this._draggedRange.detach(); |
44840 | 44839 |
this._draggedRange = null; |
... | ... | @@ -46164,17 +46163,17 @@ |
46164 | 46163 |
e instanceof nd |
46165 | 46164 |
? e |
46166 | 46165 |
: i.document |
46167 |
- .getRootNames() |
|
46168 |
- .reduce( |
|
46169 |
- (t, n) => |
|
46170 |
- o.updateFindResultFromRange( |
|
46171 |
- i.createRangeIn(i.document.getRoot(n)), |
|
46172 |
- i, |
|
46173 |
- o.findByTextCallback(e, this._state), |
|
46174 |
- t |
|
46175 |
- ), |
|
46176 |
- null |
|
46177 |
- ); |
|
46166 |
+ .getRootNames() |
|
46167 |
+ .reduce( |
|
46168 |
+ (t, n) => |
|
46169 |
+ o.updateFindResultFromRange( |
|
46170 |
+ i.createRangeIn(i.document.getRoot(n)), |
|
46171 |
+ i, |
|
46172 |
+ o.findByTextCallback(e, this._state), |
|
46173 |
+ t |
|
46174 |
+ ), |
|
46175 |
+ null |
|
46176 |
+ ); |
|
46178 | 46177 |
if (r.length) { |
46179 | 46178 |
i.change(() => { |
46180 | 46179 |
[...r].forEach((e) => { |
... | ... | @@ -51393,7 +51392,7 @@ |
51393 | 51392 |
} |
51394 | 51393 |
const r = |
51395 | 51394 |
t.getStyle("display") == "block" || |
51396 |
- t.findAncestor(n.isBlockImageView) |
|
51395 |
+ t.findAncestor(n.isBlockImageView) |
|
51397 | 51396 |
? "imageBlock" |
51398 | 51397 |
: "imageInline"; |
51399 | 51398 |
if (r !== e) { |
... | ... | @@ -51615,9 +51614,9 @@ |
51615 | 51614 |
const FH = new RegExp( |
51616 | 51615 |
String( |
51617 | 51616 |
/^(http(s)?:\/\/)?[\w-]+\.[\w.~:/[\]@!$&'()*+,;=%-]+/.source + |
51618 |
- /\.(jpg|jpeg|png|gif|ico|webp|JPG|JPEG|PNG|GIF|ICO|WEBP)/.source + |
|
51619 |
- /(\?[\w.~:/[\]@!$&'()*+,;=%-]*)?/.source + |
|
51620 |
- /(#[\w.~:/[\]@!$&'()*+,;=%-]*)?$/.source |
|
51617 |
+ /\.(jpg|jpeg|png|gif|ico|webp|JPG|JPEG|PNG|GIF|ICO|WEBP)/.source + |
|
51618 |
+ /(\?[\w.~:/[\]@!$&'()*+,;=%-]*)?/.source + |
|
51619 |
+ /(#[\w.~:/[\]@!$&'()*+,;=%-]*)?$/.source |
|
51621 | 51620 |
) |
51622 | 51621 |
); |
51623 | 51622 |
class jH extends au { |
... | ... | @@ -53389,7 +53388,7 @@ |
53389 | 53388 |
.then((t) => { |
53390 | 53389 |
this._loadersMap.set(t, e); |
53391 | 53390 |
}) |
53392 |
- .catch(() => {}); |
|
53391 |
+ .catch(() => { }); |
|
53393 | 53392 |
} |
53394 | 53393 |
e.on("change:uploaded", () => { |
53395 | 53394 |
let t = 0; |
... | ... | @@ -53514,7 +53513,7 @@ |
53514 | 53513 |
const t = this.status; |
53515 | 53514 |
this.status = "aborted"; |
53516 | 53515 |
if (!this._filePromiseWrapper.isFulfilled) { |
53517 |
- this._filePromiseWrapper.promise.catch(() => {}); |
|
53516 |
+ this._filePromiseWrapper.promise.catch(() => { }); |
|
53518 | 53517 |
this._filePromiseWrapper.rejecter("aborted"); |
53519 | 53518 |
} else if (t == "reading") { |
53520 | 53519 |
this._reader.abort(); |
... | ... | @@ -56469,13 +56468,13 @@ |
56469 | 56468 |
e.change((t) => { |
56470 | 56469 |
const o = n.isCollapsed |
56471 | 56470 |
? [ |
56472 |
- nL( |
|
56473 |
- n.getFirstPosition(), |
|
56474 |
- "linkHref", |
|
56475 |
- n.getAttribute("linkHref"), |
|
56476 |
- e |
|
56477 |
- ), |
|
56478 |
- ] |
|
56471 |
+ nL( |
|
56472 |
+ n.getFirstPosition(), |
|
56473 |
+ "linkHref", |
|
56474 |
+ n.getAttribute("linkHref"), |
|
56475 |
+ e |
|
56476 |
+ ), |
|
56477 |
+ ] |
|
56479 | 56478 |
: e.schema.getValidRanges(n.getRanges(), "linkHref"); |
56480 | 56479 |
for (const e of o) { |
56481 | 56480 |
t.removeAttribute("linkHref", e); |
... | ... | @@ -57381,31 +57380,31 @@ |
57381 | 57380 |
const rG = 4; |
57382 | 57381 |
const sG = new RegExp( |
57383 | 57382 |
"(^|\\s)" + |
57384 |
- "(" + |
|
57385 |
- "(" + |
|
57386 |
- "(?:(?:(?:https?|ftp):)?\\/\\/)" + |
|
57387 |
- "(?:\\S+(?::\\S*)?@)?" + |
|
57388 |
- "(?:" + |
|
57389 |
- "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" + |
|
57390 |
- "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" + |
|
57391 |
- "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" + |
|
57392 |
- "|" + |
|
57393 |
- "(" + |
|
57394 |
- "((?!www\\.)|(www\\.))" + |
|
57395 |
- "(?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.)+" + |
|
57396 |
- "(?:[a-z\\u00a1-\\uffff]{2,63})" + |
|
57397 |
- ")" + |
|
57398 |
- ")" + |
|
57399 |
- "(?::\\d{2,5})?" + |
|
57400 |
- "(?:[/?#]\\S*)?" + |
|
57401 |
- ")" + |
|
57402 |
- "|" + |
|
57403 |
- "(" + |
|
57404 |
- "(www.|(\\S+@))" + |
|
57405 |
- "((?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.))+" + |
|
57406 |
- "(?:[a-z\\u00a1-\\uffff]{2,63})" + |
|
57407 |
- ")" + |
|
57408 |
- ")$", |
|
57383 |
+ "(" + |
|
57384 |
+ "(" + |
|
57385 |
+ "(?:(?:(?:https?|ftp):)?\\/\\/)" + |
|
57386 |
+ "(?:\\S+(?::\\S*)?@)?" + |
|
57387 |
+ "(?:" + |
|
57388 |
+ "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" + |
|
57389 |
+ "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" + |
|
57390 |
+ "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" + |
|
57391 |
+ "|" + |
|
57392 |
+ "(" + |
|
57393 |
+ "((?!www\\.)|(www\\.))" + |
|
57394 |
+ "(?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.)+" + |
|
57395 |
+ "(?:[a-z\\u00a1-\\uffff]{2,63})" + |
|
57396 |
+ ")" + |
|
57397 |
+ ")" + |
|
57398 |
+ "(?::\\d{2,5})?" + |
|
57399 |
+ "(?:[/?#]\\S*)?" + |
|
57400 |
+ ")" + |
|
57401 |
+ "|" + |
|
57402 |
+ "(" + |
|
57403 |
+ "(www.|(\\S+@))" + |
|
57404 |
+ "((?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.))+" + |
|
57405 |
+ "(?:[a-z\\u00a1-\\uffff]{2,63})" + |
|
57406 |
+ ")" + |
|
57407 |
+ ")$", |
|
57409 | 57408 |
"i" |
57410 | 57409 |
); |
57411 | 57410 |
const aG = 2; |
... | ... | @@ -57974,7 +57973,7 @@ |
57974 | 57973 |
return t + e; |
57975 | 57974 |
} |
57976 | 57975 |
} |
57977 |
- const GG = { exec: function t() {} }; |
|
57976 |
+ const GG = { exec: function t() { } }; |
|
57978 | 57977 |
function KG(t) { |
57979 | 57978 |
let e = 1, |
57980 | 57979 |
n, |
... | ... | @@ -57991,15 +57990,15 @@ |
57991 | 57990 |
} |
57992 | 57991 |
function YG(t, e) { |
57993 | 57992 |
const n = t.replace(/\|/g, (t, e, n) => { |
57994 |
- let i = false, |
|
57995 |
- o = e; |
|
57996 |
- while (--o >= 0 && n[o] === "\\") i = !i; |
|
57997 |
- if (i) { |
|
57998 |
- return "|"; |
|
57999 |
- } else { |
|
58000 |
- return " |"; |
|
58001 |
- } |
|
58002 |
- }), |
|
57993 |
+ let i = false, |
|
57994 |
+ o = e; |
|
57995 |
+ while (--o >= 0 && n[o] === "\\") i = !i; |
|
57996 |
+ if (i) { |
|
57997 |
+ return "|"; |
|
57998 |
+ } else { |
|
57999 |
+ return " |"; |
|
58000 |
+ } |
|
58001 |
+ }), |
|
58003 | 58002 |
i = n.split(/ \|/); |
58004 | 58003 |
let o = 0; |
58005 | 58004 |
if (!i[0].trim()) { |
... | ... | @@ -58811,16 +58810,16 @@ |
58811 | 58810 |
iK.pedantic = KG({}, iK.normal, { |
58812 | 58811 |
html: VG( |
58813 | 58812 |
"^ *(?:comment *(?:\\n|\\s*$)" + |
58814 |
- "|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)" + |
|
58815 |
- "|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))" |
|
58813 |
+ "|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)" + |
|
58814 |
+ "|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))" |
|
58816 | 58815 |
) |
58817 | 58816 |
.replace("comment", iK._comment) |
58818 | 58817 |
.replace( |
58819 | 58818 |
/tag/g, |
58820 | 58819 |
"(?!(?:" + |
58821 |
- "a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub" + |
|
58822 |
- "|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)" + |
|
58823 |
- "\\b)\\w+(?!:|[^\\w\\s@]*@)\\b" |
|
58820 |
+ "a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub" + |
|
58821 |
+ "|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)" + |
|
58822 |
+ "\\b)\\w+(?!:|[^\\w\\s@]*@)\\b" |
|
58824 | 58823 |
) |
58825 | 58824 |
.getRegex(), |
58826 | 58825 |
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, |
... | ... | @@ -59830,8 +59829,8 @@ |
59830 | 59829 |
if (typeof t !== "string") { |
59831 | 59830 |
throw new Error( |
59832 | 59831 |
"marked(): input parameter is of type " + |
59833 |
- Object.prototype.toString.call(t) + |
|
59834 |
- ", string expected" |
|
59832 |
+ Object.prototype.toString.call(t) + |
|
59833 |
+ ", string expected" |
|
59835 | 59834 |
); |
59836 | 59835 |
} |
59837 | 59836 |
if (typeof e === "function") { |
... | ... | @@ -60066,8 +60065,8 @@ |
60066 | 60065 |
if (typeof t !== "string") { |
60067 | 60066 |
throw new Error( |
60068 | 60067 |
"marked.parseInline(): input parameter is of type " + |
60069 |
- Object.prototype.toString.call(t) + |
|
60070 |
- ", string expected" |
|
60068 |
+ Object.prototype.toString.call(t) + |
|
60069 |
+ ", string expected" |
|
60071 | 60070 |
); |
60072 | 60071 |
} |
60073 | 60072 |
e = KG({}, hK.defaults, e || {}); |
... | ... | @@ -60563,11 +60562,11 @@ |
60563 | 60562 |
if (new t().parseFromString("", "text/html")) { |
60564 | 60563 |
e = true; |
60565 | 60564 |
} |
60566 |
- } catch (t) {} |
|
60565 |
+ } catch (t) { } |
|
60567 | 60566 |
return e; |
60568 | 60567 |
} |
60569 | 60568 |
function OK() { |
60570 |
- var t = function () {}; |
|
60569 |
+ var t = function () { }; |
|
60571 | 60570 |
{ |
60572 | 60571 |
if (FK()) { |
60573 | 60572 |
t.prototype.parseFromString = function (t) { |
... | ... | @@ -60980,9 +60979,9 @@ |
60980 | 60979 |
} |
60981 | 60980 |
const yY = new RegExp( |
60982 | 60981 |
/\b(?:(?:https?|ftp):\/\/|www\.)/.source + |
60983 |
- /(?![-_])(?:[-_a-z0-9\u00a1-\uffff]{1,63}\.)+(?:[a-z\u00a1-\uffff]{2,63})/ |
|
60984 |
- .source + |
|
60985 |
- /(?:[^\s<>]*)/.source, |
|
60982 |
+ /(?![-_])(?:[-_a-z0-9\u00a1-\uffff]{1,63}\.)+(?:[a-z\u00a1-\uffff]{2,63})/ |
|
60983 |
+ .source + |
|
60984 |
+ /(?:[^\s<>]*)/.source, |
|
60986 | 60985 |
"gi" |
60987 | 60986 |
); |
60988 | 60987 |
function* xY(t) { |
... | ... | @@ -61036,7 +61035,7 @@ |
61036 | 61035 |
registerRawContentMatcher(t) { |
61037 | 61036 |
this._htmlDP.registerRawContentMatcher(t); |
61038 | 61037 |
} |
61039 |
- useFillerType() {} |
|
61038 |
+ useFillerType() { } |
|
61040 | 61039 |
} |
61041 | 61040 |
class SY extends au { |
61042 | 61041 |
constructor(t) { |
... | ... | @@ -61441,8 +61440,7 @@ |
61441 | 61440 |
const n = t[2]; |
61442 | 61441 |
return ( |
61443 | 61442 |
'<div style="position: relative; padding-bottom: 100%; height: 0; padding-bottom: 56.2493%;">' + |
61444 |
- `<iframe src="https://www.youtube.com/embed/${e}${ |
|
61445 |
- n ? `?start=${n}` : "" |
|
61443 |
+ `<iframe src="https://www.youtube.com/embed/${e}${n ? `?start=${n}` : "" |
|
61446 | 61444 |
}" ` + |
61447 | 61445 |
'style="position: absolute; width: 100%; height: 100%; top: 0; left: 0;" ' + |
61448 | 61446 |
'frameborder="0" allow="autoplay; encrypted-media" allowfullscreen>' + |
... | ... | @@ -62722,8 +62720,8 @@ |
62722 | 62720 |
e.length === 1 |
62723 | 62721 |
? " " |
62724 | 62722 |
: Array(e.length + 1) |
62725 |
- .join(" ") |
|
62726 |
- .substr(0, e.length) |
|
62723 |
+ .join(" ") |
|
62724 |
+ .substr(0, e.length) |
|
62727 | 62725 |
); |
62728 | 62726 |
} |
62729 | 62727 |
function lZ(t, e) { |
... | ... | @@ -63851,15 +63849,15 @@ |
63851 | 63849 |
if (!e && n.some((e) => t.plugins.has(e))) { |
63852 | 63850 |
console.warn( |
63853 | 63851 |
"You initialized the editor with the source editing feature and at least one of the collaboration features. " + |
63854 |
- "Please be advised that the source editing feature may not work, and be careful when editing document source " + |
|
63855 |
- "that contains markers created by the collaboration features." |
|
63852 |
+ "Please be advised that the source editing feature may not work, and be careful when editing document source " + |
|
63853 |
+ "that contains markers created by the collaboration features." |
|
63856 | 63854 |
); |
63857 | 63855 |
} |
63858 | 63856 |
if (t.plugins.has("RestrictedEditingModeEditing")) { |
63859 | 63857 |
console.warn( |
63860 | 63858 |
"You initialized the editor with the source editing feature and restricted editing feature. " + |
63861 |
- "Please be advised that the source editing feature may not work, and be careful when editing document source " + |
|
63862 |
- "that contains markers created by the restricted editing feature." |
|
63859 |
+ "Please be advised that the source editing feature may not work, and be careful when editing document source " + |
|
63860 |
+ "that contains markers created by the restricted editing feature." |
|
63863 | 63861 |
); |
63864 | 63862 |
} |
63865 | 63863 |
} |
... | ... | @@ -71204,8 +71202,8 @@ |
71204 | 71202 |
const s = r.is("element", "table") |
71205 | 71203 |
? r |
71206 | 71204 |
: Array.from(r.getChildren()).find((t) => |
71207 |
- t.is("element", "table") |
|
71208 |
- ); |
|
71205 |
+ t.is("element", "table") |
|
71206 |
+ ); |
|
71209 | 71207 |
const a = s0(o); |
71210 | 71208 |
if (a) { |
71211 | 71209 |
i.addClass("ck-table-resized", s); |
... | ... | @@ -71791,7 +71789,7 @@ |
71791 | 71789 |
this.fire("update", { words: e, characters: n }); |
71792 | 71790 |
} |
71793 | 71791 |
} |
71794 |
- class Q5 extends WM {} |
|
71792 |
+ class Q5 extends WM { } |
|
71795 | 71793 |
Q5.builtinPlugins = [ |
71796 | 71794 |
dI, |
71797 | 71795 |
mN, |
+++ client/resources/img/admin/ico_contacts_book.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M4 2C3.44772 2 3 2.44772 3 3V5H5V4H19V20H5V19H3V21C3 21.5523 3.44772 22 4 22H20C20.5523 22 21 21.5523 21 21V3C21 2.44772 20.5523 2 20 2H4ZM9 16C9 14.3431 10.3431 13 12 13C13.6569 13 15 14.3431 15 16H9ZM12 12C10.8954 12 10 11.1046 10 10C10 8.89543 10.8954 8 12 8C13.1046 8 14 8.89543 14 10C14 11.1046 13.1046 12 12 12ZM6 9V7H2V9H6ZM6 11V13H2V11H6ZM6 17V15H2V17H6Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/admin/ico_folders.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M6 7V4C6 3.44772 6.44772 3 7 3H13.4142L15.4142 5H21C21.5523 5 22 5.44772 22 6V16C22 16.5523 21.5523 17 21 17H18V20C18 20.5523 17.5523 21 17 21H3C2.44772 21 2 20.5523 2 20V8C2 7.44772 2.44772 7 3 7H6ZM6 9H4V19H16V17H6V9ZM8 5V15H20V7H14.5858L12.5858 5H8Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/admin/ico_image.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M20 5H4V19L13.2923 9.70649C13.6828 9.31595 14.3159 9.31591 14.7065 9.70641L20 15.0104V5ZM2 3.9934C2 3.44476 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44495 22 3.9934V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934ZM8 11C6.89543 11 6 10.1046 6 9C6 7.89543 6.89543 7 8 7C9.10457 7 10 7.89543 10 9C10 10.1046 9.10457 11 8 11Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/admin/ico_mac.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M14 18V20L16 21V22H8L7.99639 21.0036L10 20V18H2.9918C2.44405 18 2 17.5511 2 16.9925V4.00748C2 3.45107 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44892 22 4.00748V16.9925C22 17.5489 21.5447 18 21.0082 18H14ZM4 5V14H20V5H4Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/admin/ico_numbers.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M9 18H4V10H9V18ZM15 18H10V6H15V18ZM21 18H16V2H21V18ZM22 22H3V20H22V22Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/admin/ico_settings.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M5.33409 4.54491C6.3494 3.63637 7.55145 2.9322 8.87555 2.49707C9.60856 3.4128 10.7358 3.99928 12 3.99928C13.2642 3.99928 14.3914 3.4128 15.1245 2.49707C16.4486 2.9322 17.6506 3.63637 18.6659 4.54491C18.2405 5.637 18.2966 6.90531 18.9282 7.99928C19.5602 9.09388 20.6314 9.77679 21.7906 9.95392C21.9279 10.6142 22 11.2983 22 11.9993C22 12.7002 21.9279 13.3844 21.7906 14.0446C20.6314 14.2218 19.5602 14.9047 18.9282 15.9993C18.2966 17.0932 18.2405 18.3616 18.6659 19.4536C17.6506 20.3622 16.4486 21.0664 15.1245 21.5015C14.3914 20.5858 13.2642 19.9993 12 19.9993C10.7358 19.9993 9.60856 20.5858 8.87555 21.5015C7.55145 21.0664 6.3494 20.3622 5.33409 19.4536C5.75952 18.3616 5.7034 17.0932 5.0718 15.9993C4.43983 14.9047 3.36862 14.2218 2.20935 14.0446C2.07212 13.3844 2 12.7002 2 11.9993C2 11.2983 2.07212 10.6142 2.20935 9.95392C3.36862 9.77679 4.43983 9.09388 5.0718 7.99928C5.7034 6.90531 5.75952 5.637 5.33409 4.54491ZM13.5 14.5974C14.9349 13.7689 15.4265 11.9342 14.5981 10.4993C13.7696 9.0644 11.9349 8.57277 10.5 9.4012C9.06512 10.2296 8.5735 12.0644 9.40192 13.4993C10.2304 14.9342 12.0651 15.4258 13.5 14.5974Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/admin/ico_shield_user.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3.78307 2.82598L12 1L20.2169 2.82598C20.6745 2.92766 21 3.33347 21 3.80217V13.7889C21 15.795 19.9974 17.6684 18.3282 18.7812L12 23L5.6718 18.7812C4.00261 17.6684 3 15.795 3 13.7889V3.80217C3 3.33347 3.32553 2.92766 3.78307 2.82598ZM12 11C13.3807 11 14.5 9.88071 14.5 8.5C14.5 7.11929 13.3807 6 12 6C10.6193 6 9.5 7.11929 9.5 8.5C9.5 9.88071 10.6193 11 12 11ZM7.52746 16H16.4725C16.2238 13.75 14.3163 12 12 12C9.68372 12 7.77619 13.75 7.52746 16Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/admin/ico_terminal_window.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M20 9V5H4V9H20ZM20 11H4V19H20V11ZM3 3H21C21.5523 3 22 3.44772 22 4V20C22 20.5523 21.5523 21 21 21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3ZM5 12H8V17H5V12ZM5 6H7V8H5V6ZM9 6H11V8H9V6Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/admin/ico_user.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M11 14.0619V20H13V14.0619C16.9463 14.554 20 17.9204 20 22H4C4 17.9204 7.05369 14.554 11 14.0619ZM12 13C8.685 13 6 10.315 6 7C6 3.685 8.685 1 12 1C15.315 1 18 3.685 18 7C18 10.315 15.315 13 12 13Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/component/common/ico_arr_16_right_green70.svg
... | ... | @@ -0,0 +1,9 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<!-- Generator: Adobe Illustrator 24.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |
3 | +<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" | |
4 | + y="0px" viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> | |
5 | +<style type="text/css"> | |
6 | + .st0{fill:none;stroke:#228738;stroke-linecap:round;} | |
7 | +</style> | |
8 | +<path class="st0" d="M6,11.5l4.1-3.8L6,4"/> | |
9 | +</svg> |
+++ client/resources/img/component/common/ico_comment.svg
... | ... | @@ -0,0 +1,1 @@ |
1 | +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M2 8.99374C2 5.68349 4.67654 3 8.00066 3H15.9993C19.3134 3 22 5.69478 22 8.99374V21H8.00066C4.68659 21 2 18.3052 2 15.0063V8.99374ZM14 11V13H16V11H14ZM8 11V13H10V11H8Z"></path></svg>(No newline at end of file) |
+++ client/resources/img/component/common/ico_pencil.svg
... | ... | @@ -0,0 +1,20 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<!-- Generator: Adobe Illustrator 24.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |
3 | +<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" | |
4 | + y="0px" width="24px" height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> | |
5 | +<style type="text/css"> | |
6 | + .st0{fill:#2D2D2D;} | |
7 | + .st1{fill:none;stroke:#2D2D2D;stroke-width:1.8;} | |
8 | +</style> | |
9 | +<polyline points="44,18.5 44,4.5 30,4.5 30,18.5 44,18.5 "/> | |
10 | +<path d="M65.8,12c1.5,0,2.7,1.2,2.7,2.7v18.7c0,1.5-1.2,2.7-2.7,2.7H47.1c-1.5,0-2.7-1.2-2.7-2.7V14.7c0-1.5,1.2-2.7,2.7-2.7H65.8" | |
11 | + /> | |
12 | +<g> | |
13 | + <g> | |
14 | + <path class="st0" d="M19.9,5.9l-1.2,1.2l-2-2l1.2-1.2c0.3-0.3,0.7-0.3,0.9,0L19.9,5C20.2,5.3,20.2,5.7,19.9,5.9"/> | |
15 | + <polygon class="st0" points="8.9,13 16.2,5.7 18.2,7.7 10.9,15 8.6,15.2 "/> | |
16 | + </g> | |
17 | + <path id="Rectangle_415" class="st1" d="M10.5,7H6.3C4.9,7,3.9,8.1,3.9,9.4v8.4c0,1.3,1.1,2.4,2.4,2.4h8.4c1.3,0,2.4-1.1,2.4-2.4 | |
18 | + v-4.2"/> | |
19 | +</g> | |
20 | +</svg> |
--- client/resources/img/component/common/ico_trashcan.svg
+++ client/resources/img/component/common/ico_trashcan.svg
... | ... | @@ -1,1 +1,10 @@ |
1 |
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 18"><title>자산 1</title><g id="레이어_2" data-name="레이어 2"><g id="레이어_1-2" data-name="레이어 1"><path d="M5,0V1H0V3H1V16a2,2,0,0,0,2,2H13a2,2,0,0,0,2-2V3h1V1H11V0H5M3,3H13V16H3V3M5,5v9H7V5H5M9,5v9h2V5Z"/></g></g></svg>(No newline at end of file) |
|
1 |
+<?xml version="1.0" encoding="utf-8"?> |
|
2 |
+<!-- Generator: Adobe Illustrator 24.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> |
|
3 |
+<svg version="1.1" id="레이어_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" |
|
4 |
+ y="0px" width="24px" height="24px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve"> |
|
5 |
+<style type="text/css"> |
|
6 |
+ .st0{fill:#2D2D2D;} |
|
7 |
+</style> |
|
8 |
+<path class="st0" d="M9,2.8v0.9H3.7v1.4h1.1v14.5c0,1.1,0,2,1.1,2h12.6c1.1,0,1.1-0.9,1.1-2V5.2h0.8V3.7H15V2.8H9 M6.4,5.2h11.5 |
|
9 |
+ v14.9H6.4V5.9 M9,7.9v9.3h1.4V7.9H9 M13.7,7.9v9.3h1.5V7.9H13.7z"/> |
|
10 |
+</svg> |
--- client/resources/scss/admin/content.scss
+++ client/resources/scss/admin/content.scss
... | ... | @@ -25,6 +25,9 @@ |
25 | 25 |
&.sch-full{ |
26 | 26 |
height: calc(100% - 70px); |
27 | 27 |
} |
28 |
+ &.detail{ |
|
29 |
+ height: calc(100% - 228px); |
|
30 |
+ } |
|
28 | 31 |
} |
29 | 32 |
} |
30 | 33 |
|
... | ... | @@ -100,7 +103,8 @@ |
100 | 103 |
|
101 | 104 |
.btn-wrap { |
102 | 105 |
@include flex-layout(flex, center, end); |
103 |
- padding: 3rem 0; |
|
106 |
+ // padding: 2rem 0; |
|
107 |
+ padding-top: 2rem; |
|
104 | 108 |
|
105 | 109 |
button { |
106 | 110 |
margin-left: 1rem; |
... | ... | @@ -132,16 +136,12 @@ |
132 | 136 |
background-color: var(--tk-white); |
133 | 137 |
border-radius: 0 0 2rem 2rem; |
134 | 138 |
height: calc(100% - 45px); |
135 |
- // grid-template-rows: 1fr 1fr; |
|
139 |
+ // max-height: fit-content; |
|
136 | 140 |
|
137 |
- >div { |
|
141 |
+ .layout { |
|
138 | 142 |
width: 100%; |
139 | 143 |
padding: 1rem; |
140 | 144 |
border-bottom: 1px solid var(--tk-gray-10); |
141 |
- |
|
142 |
- // &:last-child { |
|
143 |
- // align-items: flex-start; |
|
144 |
- // } |
|
145 | 145 |
|
146 | 146 |
.form-title { |
147 | 147 |
width: 180px; |
... | ... | @@ -152,7 +152,6 @@ |
152 | 152 |
margin-right: .5rem; |
153 | 153 |
} |
154 | 154 |
} |
155 |
- |
|
156 | 155 |
|
157 | 156 |
.form-select { |
158 | 157 |
min-width: 135px; |
... | ... | @@ -169,7 +168,7 @@ |
169 | 168 |
|
170 | 169 |
>div, |
171 | 170 |
.form-group { |
172 |
- width: calc(100% - 180px); |
|
171 |
+ max-width: calc(100% - 180px); |
|
173 | 172 |
|
174 | 173 |
.form-control { |
175 | 174 |
max-width: 100%; |
... | ... | @@ -178,12 +177,21 @@ |
178 | 177 |
span { |
179 | 178 |
font-size: var(--tk-fz-detail-sm); |
180 | 179 |
} |
180 |
+ |
|
181 |
+ &.w_100{ |
|
182 |
+ width: 100%; |
|
183 |
+ } |
|
181 | 184 |
} |
182 | 185 |
|
183 | 186 |
>div, |
184 | 187 |
.input-group{ |
185 | 188 |
max-width: calc(100% - 180px); |
189 |
+ &.w_100{ |
|
190 |
+ width: 100%; |
|
191 |
+ } |
|
186 | 192 |
} |
193 |
+ |
|
194 |
+ |
|
187 | 195 |
|
188 | 196 |
&.grid-column { |
189 | 197 |
grid-column: 1/3; |
... | ... | @@ -198,6 +206,14 @@ |
198 | 206 |
padding-bottom: 0; |
199 | 207 |
border-bottom: 0; |
200 | 208 |
} |
209 |
+ |
|
210 |
+ &.pb10{ |
|
211 |
+ padding-bottom: 1rem; |
|
212 |
+ } |
|
213 |
+ } |
|
214 |
+ |
|
215 |
+ &.grid-none { |
|
216 |
+ display: block; |
|
201 | 217 |
} |
202 | 218 |
|
203 | 219 |
|
... | ... | @@ -225,7 +241,6 @@ |
225 | 241 |
} |
226 | 242 |
|
227 | 243 |
} |
228 |
- |
|
229 | 244 |
|
230 | 245 |
.form-box { |
231 | 246 |
border: 1px solid var(--tk-gray-10); |
... | ... | @@ -377,14 +392,10 @@ |
377 | 392 |
// height: 100%; |
378 | 393 |
// box-shadow: 0 0 1rem rgba(0, 0, 0, 0.02); |
379 | 394 |
|
380 |
- &.overflow-y{ |
|
381 |
- overflow-y: auto; |
|
382 |
- } |
|
383 |
- |
|
384 | 395 |
.tbl{ |
385 | 396 |
max-width: 100%; |
386 | 397 |
width: 100%; |
387 |
- .data{ |
|
398 |
+ &.data{ |
|
388 | 399 |
thead{ |
389 | 400 |
th{ |
390 | 401 |
background-color: #c8d0d8; |
... | ... | @@ -412,6 +423,11 @@ |
412 | 423 |
} |
413 | 424 |
} |
414 | 425 |
} |
426 |
+ |
|
427 |
+ |
|
428 |
+ &.overflow-y{ |
|
429 |
+ overflow-y: auto; |
|
430 |
+ } |
|
415 | 431 |
} |
416 | 432 |
|
417 | 433 |
|
... | ... | @@ -463,6 +479,10 @@ |
463 | 479 |
gap: 3rem; |
464 | 480 |
} |
465 | 481 |
|
482 |
+.w_100{ |
|
483 |
+ width: 100%; |
|
484 |
+} |
|
485 |
+ |
|
466 | 486 |
.h_100{ |
467 | 487 |
height: 100%; |
468 | 488 |
} |
... | ... | @@ -478,3 +498,138 @@ |
478 | 498 |
} |
479 | 499 |
} |
480 | 500 |
|
501 |
+.border-top{ |
|
502 |
+ border-top: 1px solid var(--tk-gray-10); |
|
503 |
+} |
|
504 |
+ |
|
505 |
+ |
|
506 |
+.gallery-wrap{ |
|
507 |
+ margin-bottom: 3rem; |
|
508 |
+ .mySwiper{ |
|
509 |
+ max-width: 600px; |
|
510 |
+ height: auto; |
|
511 |
+ aspect-ratio: 4/3; |
|
512 |
+ background-color: #c8d0d8; |
|
513 |
+ } |
|
514 |
+ |
|
515 |
+ .mySwiper2{ |
|
516 |
+ max-width: 600px; |
|
517 |
+ .swiper-slide{ |
|
518 |
+ width: 25%; |
|
519 |
+ height: auto; |
|
520 |
+ aspect-ratio: 4/3; |
|
521 |
+ background-color: #c8d0d8; |
|
522 |
+ } |
|
523 |
+ } |
|
524 |
+} |
|
525 |
+ |
|
526 |
+.video-zone{ |
|
527 |
+ margin-bottom: 3rem; |
|
528 |
+ |
|
529 |
+ iframe{ |
|
530 |
+ display: block; |
|
531 |
+ width: 600px; |
|
532 |
+ height: auto; |
|
533 |
+ aspect-ratio: 16/9; |
|
534 |
+ margin: 0 auto; |
|
535 |
+ } |
|
536 |
+} |
|
537 |
+ |
|
538 |
+.comment-box{ |
|
539 |
+ padding: 3rem; |
|
540 |
+ background-color: var(--tk-gray-10); |
|
541 |
+ @include radius(20); |
|
542 |
+ margin-top: 3rem; |
|
543 |
+ |
|
544 |
+ .comment-head{ |
|
545 |
+ width: auto; |
|
546 |
+ margin-right: 3rem; |
|
547 |
+ padding-left: 3rem; |
|
548 |
+ background-image: url(#{$url}/component/common/ico_comment.svg); |
|
549 |
+ background-repeat: no-repeat; |
|
550 |
+ background-position: left center; |
|
551 |
+ } |
|
552 |
+ |
|
553 |
+ .form-control{ |
|
554 |
+ max-width: calc(100% - 230px); |
|
555 |
+ } |
|
556 |
+ |
|
557 |
+ .btn{ |
|
558 |
+ margin-left: 1rem; |
|
559 |
+ } |
|
560 |
+} |
|
561 |
+ |
|
562 |
+.navigate-wrap{ |
|
563 |
+ padding: 2rem; |
|
564 |
+ background-color: var(--tk-white); |
|
565 |
+ @include radius(20); |
|
566 |
+ margin-top: 2rem; |
|
567 |
+ .content-navigate{ |
|
568 |
+ border-top: 1px solid var(--tk-gray-50); |
|
569 |
+ border-bottom: 1px solid var(--tk-gray-50); |
|
570 |
+ tbody{ |
|
571 |
+ tr{ |
|
572 |
+ border-bottom: 1px solid var(--tk-gray-30); |
|
573 |
+ |
|
574 |
+ td{ |
|
575 |
+ padding: 1rem; |
|
576 |
+ } |
|
577 |
+ |
|
578 |
+ &:last-child{ |
|
579 |
+ border-bottom: 0; |
|
580 |
+ } |
|
581 |
+ } |
|
582 |
+ } |
|
583 |
+ } |
|
584 |
+} |
|
585 |
+ |
|
586 |
+.icon-btn-zone{ |
|
587 |
+ button{ |
|
588 |
+ border: 1px solid var(--tk-gray-30); |
|
589 |
+ background-color: var(--tk-white); |
|
590 |
+ border-radius: 50%; |
|
591 |
+ margin-left: 1rem; |
|
592 |
+ &.btn-ico[class*='ico-'] { |
|
593 |
+ background-size: 1.8rem; |
|
594 |
+ } |
|
595 |
+ |
|
596 |
+ &:first-child{ |
|
597 |
+ margin-left: 0; |
|
598 |
+ } |
|
599 |
+ } |
|
600 |
+} |
|
601 |
+ |
|
602 |
+.state{ |
|
603 |
+ display: inline-block; |
|
604 |
+ padding: .5rem 1rem; |
|
605 |
+ @include radius(10); |
|
606 |
+ font-weight: 700; |
|
607 |
+ &.red{ |
|
608 |
+ background-color: var(--tk-point-10); |
|
609 |
+ color: var(--tk-point-40); |
|
610 |
+ } |
|
611 |
+ &.blue{ |
|
612 |
+ background-color: var(--tk-primary-10); |
|
613 |
+ color: var(--tk-primary-40); |
|
614 |
+ } |
|
615 |
+ |
|
616 |
+ &.answer{ |
|
617 |
+ border: 1px solid var(--tk-gray-90); |
|
618 |
+ margin-right: 1rem; |
|
619 |
+ font-size: 1.5rem; |
|
620 |
+ } |
|
621 |
+ |
|
622 |
+ &.question{ |
|
623 |
+ background-color: var(--tk-gray-90); |
|
624 |
+ color: var(--tk-white); |
|
625 |
+ margin-right: 1rem; |
|
626 |
+ font-size: 1.5rem; |
|
627 |
+ } |
|
628 |
+} |
|
629 |
+ |
|
630 |
+ |
|
631 |
+ |
|
632 |
+ |
|
633 |
+ |
|
634 |
+ |
|
635 |
+ |
--- client/resources/scss/admin/layout.scss
+++ client/resources/scss/admin/layout.scss
... | ... | @@ -77,6 +77,34 @@ |
77 | 77 |
&.main-active{ |
78 | 78 |
color: var(--tk-main-50); |
79 | 79 |
font-weight: 700; |
80 |
+ |
|
81 |
+ } |
|
82 |
+ } |
|
83 |
+ |
|
84 |
+ >span.has-children{ |
|
85 |
+ position: relative; |
|
86 |
+ |
|
87 |
+ &::after { |
|
88 |
+ content: ''; |
|
89 |
+ position: absolute; |
|
90 |
+ right: 0; |
|
91 |
+ top: 50%; |
|
92 |
+ transform: translateY(-50%); |
|
93 |
+ width: 20px; |
|
94 |
+ height: 20px; |
|
95 |
+ background-image: url(#{$url}/component/common/ico_arr_16_right_gray70.svg); |
|
96 |
+ background-repeat: no-repeat; |
|
97 |
+ background-size: contain; |
|
98 |
+ border:1px solid var(--tk-gray-50); |
|
99 |
+ border-radius: 50%; |
|
100 |
+ transition: transform 0.3s ease; |
|
101 |
+ } |
|
102 |
+ |
|
103 |
+ &.open::after { |
|
104 |
+ border: 1px solid var(--tk-main-50); |
|
105 |
+ background-image: url(#{$url}/component/common/ico_arr_16_right_green70.svg); |
|
106 |
+ transform: translateY(-50%) rotate(90deg); // 오른쪽 화살표 → 아래 방향 |
|
107 |
+ |
|
80 | 108 |
} |
81 | 109 |
} |
82 | 110 |
|
--- client/views/component/ckeditor5/ckeditor.css
+++ client/views/component/ckeditor5/ckeditor.css
... | ... | @@ -1,9 +1,17 @@ |
1 | 1 |
/**** ckeditor ****/ |
2 |
+.ck-reset{ |
|
3 |
+ height: 100%; |
|
4 |
+} |
|
5 |
+.ck-editor__main{ |
|
6 |
+ height: calc(100% - 40px); |
|
7 |
+} |
|
2 | 8 |
.ck-restricted-editing_mode_standard { |
3 |
- height: 600px; |
|
9 |
+ /* height: 600px; */ |
|
10 |
+ height: 100%; |
|
4 | 11 |
|
5 | 12 |
} |
6 | 13 |
|
14 |
+ |
|
7 | 15 |
.ck-source-editing-area { |
8 | 16 |
height: 600px; |
9 | 17 |
} |
--- client/views/component/ckeditor5/ckeditorComponent.vue
+++ client/views/component/ckeditor5/ckeditorComponent.vue
... | ... | @@ -1,5 +1,5 @@ |
1 | 1 |
<template> |
2 |
- <textarea name="editor5" id="editor5" style="width:100%" ref="editorContainer"></textarea> |
|
2 |
+ <textarea name="editor5" id="editor5" style="width:50%" ref="editorContainer"></textarea> |
|
3 | 3 |
</template> |
4 | 4 |
<script> |
5 | 5 |
import { mdiBorderColor } from '@mdi/js'; |
--- client/views/component/comment/CommentItem.vue
+++ client/views/component/comment/CommentItem.vue
... | ... | @@ -1,6 +1,6 @@ |
1 | 1 |
<template> |
2 | 2 |
<div class="comment-item" v-for="comment in comments" :key="comment.id"> |
3 |
- <div class="flex align-center mb5"> |
|
3 |
+ <div class="layout"> |
|
4 | 4 |
<h4 class="comment-user">{{ comment.rgtrNm }}</h4> |
5 | 5 |
<span class="comment-date ml5">{{ comment.regDt }}</span> |
6 | 6 |
</div> |
... | ... | @@ -8,16 +8,12 @@ |
8 | 8 |
<textarea v-if="'isUpdate' in comment && comment.isUpdate" class="comment-text mb10" v-model="comment.cmntCn" |
9 | 9 |
style="width: 100%; min-height: 4rem"></textarea> |
10 | 10 |
|
11 |
- <p v-else class="comment-text mb10"> |
|
11 |
+ <p v-else class="comment-text"> |
|
12 | 12 |
{{ comment.useYn == "Y" ? comment.cmntCn : "[ 삭제된 댓글입니다. ]" }} |
13 | 13 |
</p> |
14 | 14 |
|
15 |
- <div v-if="showReplyInput[comment.cmntId]" class="flex align-center mb10"> |
|
16 |
- <div class="gd-10 pl0"> |
|
15 |
+ <div v-if="showReplyInput[comment.cmntId]" class="layout"> |
|
17 | 16 |
<textarea v-model="comment.replyText" style="width: 100%; min-height: 4rem"></textarea> |
18 |
- </div> |
|
19 |
- |
|
20 |
- <div class="gd-2 pr0"> |
|
21 | 17 |
<button :class="{ |
22 | 18 |
'large-btn': true, |
23 | 19 |
'blue-btn': pageRole == 'adm', |
... | ... | @@ -26,7 +22,6 @@ |
26 | 22 |
등록 |
27 | 23 |
</button> |
28 | 24 |
</div> |
29 |
- </div> |
|
30 | 25 |
|
31 | 26 |
<div class="flex justify-end align-center mb10"> |
32 | 27 |
<button v-if="comment.isUpdate != true" :class="{ |
--- client/views/layout/AdminMenu.vue
+++ client/views/layout/AdminMenu.vue
... | ... | @@ -7,7 +7,7 @@ |
7 | 7 |
<ul class="main-menu"> |
8 | 8 |
<li v-for="(menu, idx) in menuList" :key="idx" class="menu-item" |
9 | 9 |
@click.stop="toggleSubMenu(menu)"> |
10 |
- <span :class="{ 'main-active': isActive(menu.menuId) }"> |
|
10 |
+ <span :class="{ 'main-active': isActive(menu.menuId), 'open': menu.isOpen,'has-children': menu.childList && menu.childList.length > 0 }"> |
|
11 | 11 |
{{ menu.menuNm }} |
12 | 12 |
</span> |
13 | 13 |
<ul v-if="menu.isOpen" class="sub-menu"> |
--- client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert.vue
+++ client/views/pages/adm/boardManagement/template/commonTemplate/CommonInsert.vue
... | ... | @@ -40,166 +40,144 @@ |
40 | 40 |
<div class="content-zone sch-full"> |
41 | 41 |
<div class="content"> |
42 | 42 |
<div class="scroll"> |
43 |
- <div class="tbl-wrap"> |
|
44 |
- <table class="tbl data"> |
|
45 |
- <colgroup> |
|
46 |
- <col width="10%" /> |
|
47 |
- <col width="90%" /> |
|
48 |
- </colgroup> |
|
49 |
- <tbody> |
|
50 |
- <tr> |
|
51 |
- <th class="text-lf"> |
|
52 |
- <span>제목</span> |
|
53 |
- </th> |
|
54 |
- <td> |
|
55 |
- <input type="text" class="form-control sm" v-model="bbsCn.bbsNm" placeholder="제목을 입력하세요." /> |
|
56 |
- </td> |
|
57 |
- </tr> |
|
58 |
- <tr> |
|
59 |
- <th class="text-lf" style="vertical-align: top;"> |
|
60 |
- <span>내용</span> |
|
61 |
- </th> |
|
62 |
- <td> |
|
63 |
- <ckeditorComponent ref="ckeditor5" :bbsCn.sync="bbsCn"></ckeditorComponent> |
|
64 |
- </td> |
|
65 |
- </tr> |
|
66 |
- <tr v-if="bbsMng.atchFileUseYn === 'Y'"> |
|
67 |
- <th>첨부파일</th> |
|
68 |
- <td> |
|
69 |
- <label for="file" >파일찾기</label> |
|
43 |
+ <div class="form-box h_100"> |
|
44 |
+ <div class="form-box-title"> |
|
45 |
+ <p>기본정보</p> |
|
46 |
+ <p><span>*</span>필수입력</p> |
|
47 |
+ </div> |
|
48 |
+ <div class="form-content grid-none"> |
|
49 |
+ <div class="layout"> |
|
50 |
+ <label for="" class="form-title">제목</label> |
|
51 |
+ <input type="text" class="form-control sm" v-model="bbsCn.bbsNm" placeholder="제목을 입력하세요." /> |
|
52 |
+ </div> |
|
53 |
+ <div class="layout" ref="first"> |
|
54 |
+ <label for="" class="form-title">내용</label> |
|
55 |
+ <div class="w_100 h_100"> |
|
56 |
+ <ckeditorComponent ref="ckeditor5" :bbsCn.sync="bbsCn"></ckeditorComponent> |
|
57 |
+ </div> |
|
58 |
+ </div> |
|
59 |
+ <div class="layout" ref="two" v-if="bbsMng.atchFileUseYn === 'Y'"> |
|
60 |
+ <label for="" class="form-title">첨부파일</label> |
|
61 |
+ <div> |
|
62 |
+ <label for="file" >파일찾기</label> |
|
63 |
+ <input |
|
64 |
+ type="file" |
|
65 |
+ id="file" |
|
66 |
+ ref="file" |
|
67 |
+ @change="fnFileInsert" |
|
68 |
+ multiple |
|
69 |
+ /> |
|
70 |
+ <div v-if="fileList.length > 0"> |
|
71 |
+ <ul> |
|
72 |
+ <li v-for="(file, idx) in fileList" :key="idx"> |
|
73 |
+ <div v-if="file['fileId'] != null" class="file-wrap"> |
|
74 |
+ <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
75 |
+ <button class="del-btn" @click="fnFileDelete(file, idx)">X</button> |
|
76 |
+ </div> |
|
77 |
+ <div v-else class="file-wrap"> |
|
78 |
+ <p>{{ file.name }}</p> |
|
79 |
+ <button class="del-btn" @click="fnFileDelete(file, idx)">X</button> |
|
80 |
+ </div> |
|
81 |
+ </li> |
|
82 |
+ </ul> |
|
83 |
+ </div> |
|
84 |
+ </div> |
|
85 |
+ </div> |
|
86 |
+ <div class="layout" ref="three" v-if="bbsMng.ntcUseYn === 'Y'" > |
|
87 |
+ <label for="" class="form-title">공지글</label> |
|
88 |
+ <div class="check-area"> |
|
89 |
+ <div class="form-check"> |
|
70 | 90 |
<input |
71 |
- type="file" |
|
72 |
- id="file" |
|
73 |
- ref="file" |
|
74 |
- @change="fnFileInsert" |
|
75 |
- multiple |
|
91 |
+ type="radio" |
|
92 |
+ name="notice" |
|
93 |
+ id="notice-y" |
|
94 |
+ class="mr5" |
|
95 |
+ value="Y" |
|
96 |
+ v-model="bbsCn.ntcPstYn" |
|
76 | 97 |
/> |
77 |
- <div v-if="fileList.length > 0"> |
|
78 |
- <ul> |
|
79 |
- <li v-for="(file, idx) in fileList" :key="idx"> |
|
80 |
- <div v-if="file['fileId'] != null" class="file-wrap"> |
|
81 |
- <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
82 |
- <button class="del-btn" @click="fnFileDelete(file, idx)">X</button> |
|
83 |
- </div> |
|
84 |
- <div v-else class="file-wrap"> |
|
85 |
- <p>{{ file.name }}</p> |
|
86 |
- <button class="del-btn" @click="fnFileDelete(file, idx)">X</button> |
|
87 |
- </div> |
|
88 |
- </li> |
|
89 |
- </ul> |
|
90 |
- </div> |
|
91 |
- </td> |
|
92 |
- </tr> |
|
93 |
- <tr v-if="bbsMng.ntcUseYn === 'Y'" class="border-top"> |
|
94 |
- <th>공지글</th> |
|
95 |
- <td> |
|
96 |
- <div class="check-area"> |
|
97 |
- <div class="form-check"> |
|
98 |
- <input |
|
99 |
- type="radio" |
|
100 |
- name="notice" |
|
101 |
- id="notice-y" |
|
102 |
- class="mr5" |
|
103 |
- value="Y" |
|
104 |
- v-model="bbsCn.ntcPstYn" |
|
105 |
- /> |
|
106 |
- <label for="notice-y">사용</label> |
|
107 |
- </div> |
|
108 |
- <div class="form-check"> |
|
109 |
- <input |
|
110 |
- type="radio" |
|
111 |
- name="notice" |
|
112 |
- id="notice-n" |
|
113 |
- class="mr5" |
|
114 |
- value="N" |
|
115 |
- v-model="bbsCn.ntcPstYn" |
|
116 |
- /> |
|
117 |
- <label for="notice-n">미사용</label> |
|
118 |
- </div> |
|
119 |
- </div> |
|
120 |
- </td> |
|
121 |
- </tr> |
|
122 |
- <tr v-if="bbsCn.ntcPstYn === 'Y'" class="border-top"> |
|
123 |
- <th>공지글 게시기간</th> |
|
124 |
- <td> |
|
125 |
- <div class="input-group"> |
|
126 |
- <div class="form-control sm cal"> |
|
127 |
- <VueDatePicker |
|
128 |
- InlineOptions |
|
129 |
- placeholder="시작일" |
|
130 |
- locale="ko" |
|
131 |
- :enable-time-picker="false" |
|
132 |
- :format="formatDate" |
|
133 |
- v-model="bbsCn.ntcBgngDt" |
|
134 |
- @update:model-value="checkDateValidity('ntcBgngDt',$event)" |
|
135 |
- /> |
|
136 |
- <!-- <input |
|
137 |
- type="datetime-local" |
|
138 |
- class="full-input ml0" |
|
139 |
- v-model="bbsCn.ntcBgngDt" |
|
140 |
- @change="checkDateValidity('ntcBgngDt', $event)" |
|
141 |
- /> --> |
|
142 |
- </div> |
|
143 |
- <div class="mark">-</div> |
|
144 |
- <div class="form-control sm cal"> |
|
145 |
- <VueDatePicker |
|
146 |
- InlineOptions |
|
147 |
- placeholder="종료일" |
|
148 |
- locale="ko" |
|
149 |
- :enable-time-picker="false" |
|
150 |
- :format="formatDate" |
|
151 |
- v-model="bbsCn.ntcEndDt" |
|
152 |
- @update:model-value="checkDateValidity('ntcEndDt',$event)" |
|
153 |
- /> |
|
154 |
- <!-- <input |
|
155 |
- type="datetime-local" |
|
156 |
- class="full-input ml0" |
|
157 |
- v-model="bbsCn.ntcEndDt" |
|
158 |
- @change="checkDateValidity('ntcEndDt', $event)" |
|
159 |
- /> --> |
|
160 |
- </div> |
|
161 |
- </div> |
|
162 |
- </td> |
|
163 |
- </tr> |
|
164 |
- <tr v-if="bbsMng.prvtPstUseYn === 'Y'" class="border-top"> |
|
165 |
- <th |
|
166 |
- :class="{ |
|
167 |
- 'text-lf': true, |
|
168 |
- 'point-font2': pageRole == 'adm', |
|
169 |
- 'point-font': pageRole == 'portal', |
|
170 |
- }" |
|
171 |
- > |
|
172 |
- 비밀글 |
|
173 |
- </th> |
|
174 |
- <td colspan="3"> |
|
175 |
- <div class="flex align-center no-gutters"> |
|
176 |
- <div class="gd-4"> |
|
177 |
- <input |
|
178 |
- type="radio" |
|
179 |
- name="private" |
|
180 |
- id="private-y" |
|
181 |
- class="mr5" |
|
182 |
- value="Y" |
|
183 |
- v-model="bbsCn.prvtPstYn" |
|
184 |
- /> |
|
185 |
- <label for="private-y">사용</label> |
|
186 |
- </div> |
|
187 |
- <div class="gd-4"> |
|
188 |
- <input |
|
189 |
- type="radio" |
|
190 |
- name="private" |
|
191 |
- id="private-n" |
|
192 |
- class="mr5" |
|
193 |
- value="N" |
|
194 |
- v-model="bbsCn.prvtPstYn" |
|
195 |
- /> |
|
196 |
- <label for="private-n">미사용</label> |
|
197 |
- </div> |
|
198 |
- </div> |
|
199 |
- </td> |
|
200 |
- </tr> |
|
201 |
- </tbody> |
|
202 |
- </table> |
|
98 |
+ <label for="notice-y">사용</label> |
|
99 |
+ </div> |
|
100 |
+ <div class="form-check"> |
|
101 |
+ <input |
|
102 |
+ type="radio" |
|
103 |
+ name="notice" |
|
104 |
+ id="notice-n" |
|
105 |
+ class="mr5" |
|
106 |
+ value="N" |
|
107 |
+ v-model="bbsCn.ntcPstYn" |
|
108 |
+ /> |
|
109 |
+ <label for="notice-n">미사용</label> |
|
110 |
+ </div> |
|
111 |
+ </div> |
|
112 |
+ </div> |
|
113 |
+ <div class="layout" ref="four" v-if="bbsCn.ntcPstYn === 'Y'"> |
|
114 |
+ <label for="" class="form-title">공지글 게시기간</label> |
|
115 |
+ <div class="input-group"> |
|
116 |
+ <div class="form-control sm cal"> |
|
117 |
+ <VueDatePicker |
|
118 |
+ InlineOptions |
|
119 |
+ placeholder="시작일" |
|
120 |
+ locale="ko" |
|
121 |
+ :enable-time-picker="false" |
|
122 |
+ :format="formatDate" |
|
123 |
+ v-model="bbsCn.ntcBgngDt" |
|
124 |
+ @update:model-value="checkDateValidity('ntcBgngDt',$event)" |
|
125 |
+ /> |
|
126 |
+ <!-- <input |
|
127 |
+ type="datetime-local" |
|
128 |
+ class="full-input ml0" |
|
129 |
+ v-model="bbsCn.ntcBgngDt" |
|
130 |
+ @change="checkDateValidity('ntcBgngDt', $event)" |
|
131 |
+ /> --> |
|
132 |
+ </div> |
|
133 |
+ <div class="mark">-</div> |
|
134 |
+ <div class="form-control sm cal"> |
|
135 |
+ <VueDatePicker |
|
136 |
+ InlineOptions |
|
137 |
+ placeholder="종료일" |
|
138 |
+ locale="ko" |
|
139 |
+ :enable-time-picker="false" |
|
140 |
+ :format="formatDate" |
|
141 |
+ v-model="bbsCn.ntcEndDt" |
|
142 |
+ @update:model-value="checkDateValidity('ntcEndDt',$event)" |
|
143 |
+ /> |
|
144 |
+ <!-- <input |
|
145 |
+ type="datetime-local" |
|
146 |
+ class="full-input ml0" |
|
147 |
+ v-model="bbsCn.ntcEndDt" |
|
148 |
+ @change="checkDateValidity('ntcEndDt', $event)" |
|
149 |
+ /> --> |
|
150 |
+ </div> |
|
151 |
+ </div> |
|
152 |
+ </div> |
|
153 |
+ <div class="layout" ref="five" v-if="bbsMng.prvtPstUseYn === 'Y'"> |
|
154 |
+ <label for="" class="form-title">비밀글</label> |
|
155 |
+ <div class="flex align-center no-gutters"> |
|
156 |
+ <div class="gd-4"> |
|
157 |
+ <input |
|
158 |
+ type="radio" |
|
159 |
+ name="private" |
|
160 |
+ id="private-y" |
|
161 |
+ class="mr5" |
|
162 |
+ value="Y" |
|
163 |
+ v-model="bbsCn.prvtPstYn" |
|
164 |
+ /> |
|
165 |
+ <label for="private-y">사용</label> |
|
166 |
+ </div> |
|
167 |
+ <div class="gd-4"> |
|
168 |
+ <input |
|
169 |
+ type="radio" |
|
170 |
+ name="private" |
|
171 |
+ id="private-n" |
|
172 |
+ class="mr5" |
|
173 |
+ value="N" |
|
174 |
+ v-model="bbsCn.prvtPstYn" |
|
175 |
+ /> |
|
176 |
+ <label for="private-n">미사용</label> |
|
177 |
+ </div> |
|
178 |
+ </div> |
|
179 |
+ </div> |
|
180 |
+ </div> |
|
203 | 181 |
</div> |
204 | 182 |
</div> |
205 | 183 |
</div> |
... | ... | @@ -618,7 +596,26 @@ |
618 | 596 |
const month = ('00' + (date.getMonth() + 1)).slice(-2); |
619 | 597 |
const day = ('00' + date.getDate()).slice(-2); |
620 | 598 |
return `${year}-${month}-${day}`; |
621 |
- } |
|
599 |
+ }, |
|
600 |
+ updateHeight() { |
|
601 |
+ this.$nextTick(() => { |
|
602 |
+ const first = this.$refs.first; |
|
603 |
+ const two = this.$refs.two; |
|
604 |
+ const three = this.$refs.three; |
|
605 |
+ const fore = this.$refs.fore; |
|
606 |
+ const five = this.$refs.five; |
|
607 |
+ |
|
608 |
+ let total = 0; |
|
609 |
+ if (two) total += two.offsetHeight; |
|
610 |
+ if (three) total += three.offsetHeight; |
|
611 |
+ if (fore) total += fore.offsetHeight; |
|
612 |
+ if (five) total += five.offsetHeight; |
|
613 |
+ |
|
614 |
+ if (first) { |
|
615 |
+ first.style.height = `calc(100% - ${total}px - 51px)`; |
|
616 |
+ } |
|
617 |
+ }); |
|
618 |
+ }, |
|
622 | 619 |
}, |
623 | 620 |
watch: { |
624 | 621 |
"bbsCn.ntcPstYn": function (val) { |
... | ... | @@ -631,12 +628,36 @@ |
631 | 628 |
this.bbsCn.ntcEndDt == null ? now : this.bbsCn.ntcEndDt; |
632 | 629 |
} |
633 | 630 |
}, |
631 |
+ bbsMng: { |
|
632 |
+ handler() { |
|
633 |
+ this.$nextTick(() => { |
|
634 |
+ this.updateHeight(); |
|
635 |
+ }); |
|
636 |
+ }, |
|
637 |
+ deep: true, |
|
638 |
+ }, |
|
639 |
+ bbsCn: { |
|
640 |
+ handler() { |
|
641 |
+ this.$nextTick(() => { |
|
642 |
+ this.updateHeight(); |
|
643 |
+ }); |
|
644 |
+ }, |
|
645 |
+ deep: true, |
|
646 |
+ }, |
|
634 | 647 |
}, |
635 | 648 |
computed: {}, |
636 | 649 |
components: { |
637 | 650 |
ckeditorComponent, |
638 | 651 |
}, |
639 |
- mounted() {}, |
|
652 |
+ mounted() { |
|
653 |
+ this.updateHeight(); |
|
654 |
+ |
|
655 |
+ // 창 크기 변경 시에도 대응하고 싶다면: |
|
656 |
+ window.addEventListener('resize', this.updateHeight); |
|
657 |
+ }, |
|
658 |
+ beforeUnmount() { |
|
659 |
+ window.removeEventListener('resize', this.updateHeight); |
|
660 |
+ }, |
|
640 | 661 |
}; |
641 | 662 |
</script> |
642 | 663 |
<style scoped> |
--- client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectListOne.vue
+++ client/views/pages/adm/boardManagement/template/commonTemplate/CommonSelectListOne.vue
... | ... | @@ -143,130 +143,110 @@ |
143 | 143 |
</template> |
144 | 144 |
<!-- 관리자 --> |
145 | 145 |
<template v-else> |
146 |
- <div class="content-zone sch-full"> |
|
146 |
+ <div |
|
147 |
+ class="content-zone" |
|
148 |
+ :class="bbsMng.bfrAftrPstUseYn === 'Y' ? 'detail' : 'sch-full'" |
|
149 |
+ > |
|
147 | 150 |
<div class="content"> |
148 | 151 |
<div class="scroll"> |
149 |
- <div class="tbl-wrap"> |
|
150 |
- <table class="tbl data"> |
|
151 |
- <colgroup> |
|
152 |
- <col width="10%" /> |
|
153 |
- <col width="90%" /> |
|
154 |
- </colgroup> |
|
155 |
- <tbody> |
|
156 |
- <tr class="detail-title"> |
|
157 |
- <td colspan="2"> |
|
158 |
- <p>{{ bbsCn.bbsNm }}</p> |
|
159 |
- <p><span>등록일시 | {{ bbsCn.regDt }}</span></p> |
|
160 |
- </td> |
|
161 |
- </tr> |
|
162 |
- <tr> |
|
163 |
- <td colspan="2"> |
|
164 |
- <div |
|
165 |
- class="editor5" |
|
166 |
- style="width: 100%; min-height: 35rem" |
|
167 |
- v-html="sanitizedContent" |
|
168 |
- ></div> |
|
169 |
- </td> |
|
170 |
- </tr> |
|
171 |
- <tr> |
|
172 |
- <td colspan="2"> |
|
173 |
- <div v-if="fileList.length == 0"> |
|
174 |
- <label>첨부된 파일이 없습니다.</label> |
|
175 |
- </div> |
|
176 |
- |
|
177 |
- <ul v-else class="pd10"> |
|
178 |
- <li |
|
179 |
- v-for="(item, idx) in fileList" |
|
180 |
- :key="idx" |
|
181 |
- @click="downloadFile(item)"> |
|
182 |
- <p>{{ item.fileNm + "." + item.extnNm }}</p> |
|
183 |
- <svg-icon type="mdi" :path="downloadFilePath"></svg-icon> |
|
184 |
- </li> |
|
185 |
- </ul> |
|
186 |
- </td> |
|
187 |
- </tr> |
|
188 |
- </tbody> |
|
189 |
- </table> |
|
190 |
- <table v-if="bbsMng.bfrAftrPstUseYn == 'Y'" class="content-navigate"> |
|
191 |
- <colgroup> |
|
192 |
- <col width="10%" /> |
|
193 |
- <col width="90%" /> |
|
194 |
- </colgroup> |
|
195 |
- <tbody> |
|
196 |
- <tr> |
|
197 |
- <td class="pd10 text-ct">이전글</td> |
|
198 |
- <td |
|
199 |
- v-if="prevBbsCn != null" |
|
200 |
- class="pd10 cursor" |
|
201 |
- @click="fnMoveBbsCn(prevBbsCn.bbsId)" |
|
202 |
- > |
|
203 |
- {{ prevBbsCn.bbsNm }} |
|
204 |
- </td> |
|
205 |
- <td v-else class="pd10">이전글이 없습니다</td> |
|
206 |
- </tr> |
|
207 |
- <tr> |
|
208 |
- <td class="pd10 text-ct">다음글</td> |
|
209 |
- <td |
|
210 |
- v-if="nextBbsCn != null" |
|
211 |
- class="pd10 cursor" |
|
212 |
- @click="fnMoveBbsCn(nextBbsCn.bbsId)" |
|
213 |
- > |
|
214 |
- {{ nextBbsCn.bbsNm }} |
|
215 |
- </td> |
|
216 |
- <td v-else class="pd10">다음글이 없습니다</td> |
|
217 |
- </tr> |
|
218 |
- </tbody> |
|
219 |
- </table> |
|
220 |
- <div |
|
221 |
- v-if="bbsMng.cmntUseYn == 'Y'" |
|
222 |
- :class="{ |
|
223 |
- pd30: true, |
|
224 |
- 'comment-zone': pageRole == 'adm', |
|
225 |
- 'comment-zone2': pageRole == 'portal', |
|
226 |
- }" |
|
227 |
- > |
|
228 |
- <div class="flex justify-start align-start mb30"> |
|
229 |
- <div class="gd-10 pl0"> |
|
230 |
- <textarea |
|
231 |
- name="InputCmnt" |
|
232 |
- id="InputCmnt" |
|
233 |
- style="width: 100%; min-height: 4rem" |
|
234 |
- v-model="InputCmnt" |
|
235 |
- ></textarea> |
|
236 |
- </div> |
|
237 |
- <div class="gd-2 pr0"> |
|
238 |
- <button |
|
239 |
- :class="{ |
|
240 |
- 'large-btn comment-btn radius': true, |
|
241 |
- 'blue-btn': pageRole == 'adm', |
|
242 |
- 'green-btn': pageRole == 'portal', |
|
243 |
- }" |
|
244 |
- @click="fnInsertCmnt" |
|
245 |
- > |
|
246 |
- 등록 |
|
247 |
- </button> |
|
248 |
- </div> |
|
152 |
+ <div class="form-box h_100"> |
|
153 |
+ <div class="layout between form-box-title"> |
|
154 |
+ <div> |
|
155 |
+ <p>{{ bbsCn.bbsNm }}</p> |
|
249 | 156 |
</div> |
250 |
- <div class="comment-wrap"> |
|
251 |
- <template v-if="cmntList.length > 0"> |
|
252 |
- <CommentItem |
|
253 |
- :comments="cmntList" |
|
254 |
- :pageAuth="pageAuth" |
|
255 |
- :pageId="pageId" |
|
256 |
- @isReply="isReply" |
|
257 |
- /> |
|
258 |
- </template> |
|
259 |
- <template v-else> |
|
260 |
- <p class="comment-text text-ct data-none"> |
|
261 |
- 등록된 댓글이 없습니다. |
|
262 |
- </p> |
|
263 |
- </template> |
|
157 |
+ <span>등록일시 | {{ bbsCn.regDt }}</span> |
|
158 |
+ </div> |
|
159 |
+ <div class="form-content grid-none" :style="bbsMng.cmntUseYn == 'Y' ? 'min-height: fit-content;' : ''"> |
|
160 |
+ <div style="min-height: 27rem;"> |
|
161 |
+ <div |
|
162 |
+ class="editor5" |
|
163 |
+ style="width: 100%;height: 100%;" |
|
164 |
+ v-html="sanitizedContent" |
|
165 |
+ ></div> |
|
264 | 166 |
</div> |
167 |
+ <div class="layout border-bottom pb10"> |
|
168 |
+ <p class="form-title">첨부파일</p> |
|
169 |
+ <div v-if="fileList.length == 0"> |
|
170 |
+ <label>첨부된 파일이 없습니다.</label> |
|
171 |
+ </div> |
|
172 |
+ <ul v-else> |
|
173 |
+ <li |
|
174 |
+ v-for="(item, idx) in fileList" |
|
175 |
+ :key="idx" |
|
176 |
+ @click="downloadFile(item)" |
|
177 |
+ class="layout" |
|
178 |
+ > |
|
179 |
+ <p>{{ item.fileNm + "." + item.extnNm }}</p> |
|
180 |
+ <svg-icon type="mdi" :path="downloadFilePath"></svg-icon> |
|
181 |
+ </li> |
|
182 |
+ </ul> |
|
183 |
+ </div> |
|
184 |
+ <!-- 댓글 --> |
|
185 |
+ <div v-if="bbsMng.cmntUseYn == 'Y'" class="comment-box"> |
|
186 |
+ <div class="layout w_100 mb30"> |
|
187 |
+ <p class="comment-head">댓글</p> |
|
188 |
+ <textarea |
|
189 |
+ class="form-control sm border-none" |
|
190 |
+ placeholder="댓글을 입력하세요." |
|
191 |
+ v-model="InputCmnt" |
|
192 |
+ ></textarea> |
|
193 |
+ <button class="btn sm primary" @click="fnInsertCmnt"> |
|
194 |
+ 등록 |
|
195 |
+ </button> |
|
196 |
+ </div> |
|
197 |
+ <div class="comment-wrap"> |
|
198 |
+ <template v-if="cmntList.length > 0"> |
|
199 |
+ <CommentItem |
|
200 |
+ :comments="cmntList" |
|
201 |
+ :pageAuth="pageAuth" |
|
202 |
+ :pageId="pageId" |
|
203 |
+ @isReply="isReply" |
|
204 |
+ /> |
|
205 |
+ </template> |
|
206 |
+ <template v-else> |
|
207 |
+ <p class="comment-text text-ct data-none"> |
|
208 |
+ 등록된 댓글이 없습니다. |
|
209 |
+ </p> |
|
210 |
+ </template> |
|
211 |
+ </div> |
|
212 |
+ </div> |
|
265 | 213 |
</div> |
266 | 214 |
</div> |
267 | 215 |
</div> |
268 | 216 |
</div> |
269 | 217 |
</div> |
218 |
+ <div class="navigate-wrap" v-if="bbsMng.bfrAftrPstUseYn == 'Y'"> |
|
219 |
+ <table class="content-navigate"> |
|
220 |
+ <colgroup> |
|
221 |
+ <col width="10%" /> |
|
222 |
+ <col width="90%" /> |
|
223 |
+ </colgroup> |
|
224 |
+ <tbody> |
|
225 |
+ <tr> |
|
226 |
+ <td class="pd10 text-ct">이전글</td> |
|
227 |
+ <td |
|
228 |
+ v-if="prevBbsCn != null" |
|
229 |
+ class="pd10 cursor" |
|
230 |
+ @click="fnMoveBbsCn(prevBbsCn.bbsId)" |
|
231 |
+ > |
|
232 |
+ {{ prevBbsCn.bbsNm }} |
|
233 |
+ </td> |
|
234 |
+ <td v-else class="pd10">이전글이 없습니다</td> |
|
235 |
+ </tr> |
|
236 |
+ <tr> |
|
237 |
+ <td class="pd10 text-ct">다음글</td> |
|
238 |
+ <td |
|
239 |
+ v-if="nextBbsCn != null" |
|
240 |
+ class="pd10 cursor" |
|
241 |
+ @click="fnMoveBbsCn(nextBbsCn.bbsId)" |
|
242 |
+ > |
|
243 |
+ {{ nextBbsCn.bbsNm }} |
|
244 |
+ </td> |
|
245 |
+ <td v-else class="pd10">다음글이 없습니다</td> |
|
246 |
+ </tr> |
|
247 |
+ </tbody> |
|
248 |
+ </table> |
|
249 |
+ </div> |
|
270 | 250 |
<div class="btn-wrap"> |
271 | 251 |
<button class="btn sm tertiary" @click="fnList"> |
272 | 252 |
목록 |
--- client/views/pages/adm/boardManagement/template/faqTemplate/FaqInsert.vue
+++ client/views/pages/adm/boardManagement/template/faqTemplate/FaqInsert.vue
... | ... | @@ -1,258 +1,165 @@ |
1 | 1 |
<template> |
2 |
- <div |
|
3 |
- :class="{ |
|
4 |
- content: true, |
|
5 |
- 'admin-style overflow-y': pageRole === 'adm', |
|
6 |
- 'w1400 pt50 pb50': pageRole === 'portal', |
|
7 |
- }" |
|
8 |
- > |
|
9 |
- <div |
|
10 |
- :class="{ |
|
11 |
- 'admin-page-title point-font2 mb30': pageRole == 'adm', |
|
12 |
- 'page-title point-font mb30': pageRole == 'portal', |
|
13 |
- }" |
|
14 |
- > |
|
15 |
- <p>{{ bbsMng.bbsNm }}</p> |
|
16 |
- </div> |
|
17 |
- <table class="form-table mb30"> |
|
18 |
- <colgroup> |
|
19 |
- <col width="10%" /> |
|
20 |
- <col width="90%" /> |
|
21 |
- </colgroup> |
|
22 |
- <tbody> |
|
23 |
- <tr> |
|
24 |
- <th |
|
25 |
- colspan="4" |
|
26 |
- :class="{ |
|
27 |
- 'text-lf': true, |
|
28 |
- 'point-font2': pageRole == 'adm', |
|
29 |
- 'point-font': pageRole == 'portal', |
|
30 |
- }" |
|
31 |
- > |
|
32 |
- <span>내용</span> |
|
33 |
- </th> |
|
34 |
- </tr> |
|
35 |
- <tr> |
|
36 |
- <td v-if="ansPageId != null" colspan="4"> |
|
37 |
- <textarea |
|
38 |
- name="" |
|
39 |
- id="" |
|
40 |
- class="content" |
|
41 |
- placeholder="답변을 입력하세요." |
|
42 |
- v-model="bbsCn.ansCn" |
|
43 |
- ></textarea> |
|
44 |
- </td> |
|
45 |
- <td v-else colspan="4"> |
|
46 |
- <textarea |
|
47 |
- name="" |
|
48 |
- id="" |
|
49 |
- class="content" |
|
50 |
- placeholder="내용을 입력하세요." |
|
51 |
- v-model="bbsCn.bbsCn" |
|
52 |
- ></textarea> |
|
53 |
- </td> |
|
54 |
- </tr> |
|
55 |
- <tr v-if="bbsMng.atchFileUseYn === 'Y'" class="border-top"> |
|
56 |
- <th |
|
57 |
- :class="{ |
|
58 |
- 'text-lf': true, |
|
59 |
- 'point-font2': pageRole == 'adm', |
|
60 |
- 'point-font': pageRole == 'portal', |
|
61 |
- }" |
|
62 |
- > |
|
63 |
- 첨부파일 |
|
64 |
- </th> |
|
65 |
- <td colspan="3"> |
|
66 |
- <div class="flex align-center"> |
|
67 |
- <div class="gd-10"> |
|
68 |
- <div> |
|
2 |
+ <div class="content-zone sch-full"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="form-box h_100"> |
|
6 |
+ <div class="form-box-title"> |
|
7 |
+ <p>기본정보</p> |
|
8 |
+ <p><span>*</span>필수입력</p> |
|
9 |
+ </div> |
|
10 |
+ <div class="form-content grid-none"> |
|
11 |
+ <div class="layout" ref="first"> |
|
12 |
+ <label for="" class="form-title">내용</label> |
|
13 |
+ <template v-if="ansPageId != null"> |
|
14 |
+ <textarea class="form-control area" placeholder="답변을 입력하세요." v-model="bbsCn.ansCn" style="height: 100%;"></textarea> |
|
15 |
+ </template> |
|
16 |
+ <template v-else> |
|
17 |
+ <textarea class="form-control area" placeholder="답변을 입력하세요." v-model="bbsCn.bbsCn" style="height: 100%;"></textarea> |
|
18 |
+ </template> |
|
19 |
+ </div> |
|
20 |
+ <div class="layout" ref="two" v-if="bbsMng.atchFileUseYn === 'Y'"> |
|
21 |
+ <label for="" class="form-title">첨부파일</label> |
|
22 |
+ <div class="layout"> |
|
23 |
+ <div> |
|
24 |
+ <p v-if="fileList.length < 1">첨부파일이 없습니다.</p> |
|
25 |
+ <ul v-else class="pl10 pr10 border radius align-center"> |
|
26 |
+ <li |
|
27 |
+ v-for="(file, idx) in fileList" |
|
28 |
+ :key="idx" |
|
29 |
+ class="file-wrap" |
|
30 |
+ > |
|
31 |
+ <p v-if="file['fileId'] != null"> |
|
32 |
+ {{ file["fileNm"] }}.{{ file["extnNm"] }} |
|
33 |
+ <button |
|
34 |
+ class="del-btn" |
|
35 |
+ @click="fnFileDelete(file, idx)" |
|
36 |
+ > |
|
37 |
+ X |
|
38 |
+ </button> |
|
39 |
+ </p> |
|
40 |
+ <p v-else> |
|
41 |
+ {{ file.name }} |
|
42 |
+ <button |
|
43 |
+ class="del-btn" |
|
44 |
+ @click="fnFileDelete(file, idx)" |
|
45 |
+ > |
|
46 |
+ X |
|
47 |
+ </button> |
|
48 |
+ </p> |
|
49 |
+ </li> |
|
50 |
+ </ul> |
|
51 |
+ </div> |
|
52 |
+ <div> |
|
53 |
+ <label for="file" class="large-btn green-border-btn text-ct" |
|
54 |
+ >파일찾기</label |
|
55 |
+ > |
|
56 |
+ <input |
|
57 |
+ type="file" |
|
58 |
+ id="file" |
|
59 |
+ ref="file" |
|
60 |
+ @change="fnFileInsert" |
|
61 |
+ multiple |
|
62 |
+ /> |
|
63 |
+ </div> |
|
64 |
+ </div> |
|
65 |
+ </div> |
|
66 |
+ <div class="layout" ref="three" v-if="bbsMng.ntcUseYn === 'Y'"> |
|
67 |
+ <label for="" class="form-title">공지글</label> |
|
68 |
+ <div class="flex align-center no-gutters"> |
|
69 |
+ <div class="gd-4"> |
|
70 |
+ <input |
|
71 |
+ type="radio" |
|
72 |
+ name="notice" |
|
73 |
+ id="notice-y" |
|
74 |
+ class="mr5" |
|
75 |
+ value="Y" |
|
76 |
+ v-model="bbsCn.ntcPstYn" |
|
77 |
+ /> |
|
78 |
+ <label for="notice-y">사용</label> |
|
79 |
+ </div> |
|
80 |
+ <div class="gd-4"> |
|
81 |
+ <input |
|
82 |
+ type="radio" |
|
83 |
+ name="notice" |
|
84 |
+ id="notice-n" |
|
85 |
+ class="mr5" |
|
86 |
+ value="N" |
|
87 |
+ v-model="bbsCn.ntcPstYn" |
|
88 |
+ /> |
|
89 |
+ <label for="notice-n">미사용</label> |
|
90 |
+ </div> |
|
91 |
+ </div> |
|
92 |
+ </div> |
|
93 |
+ <div class="layout" ref="four" v-if="bbsCn.ntcPstYn === 'Y'"> |
|
94 |
+ <label for="" class="form-title">공지글 게시기간</label> |
|
95 |
+ <div class="flex align-center no-gutters"> |
|
96 |
+ <div class="gd-4"> |
|
97 |
+ <input |
|
98 |
+ type="date" |
|
99 |
+ class="full-input ml0" |
|
100 |
+ v-model="bbsCn.ntcBgngDt" |
|
101 |
+ @change="checkDateValidity('ntcBgngDt', $event)" |
|
102 |
+ /> |
|
103 |
+ </div> |
|
104 |
+ <div class="pd10">-</div> |
|
105 |
+ <div class="gd-4"> |
|
106 |
+ <input |
|
107 |
+ type="date" |
|
108 |
+ class="full-input ml0" |
|
109 |
+ v-model="bbsCn.ntcEndDt" |
|
110 |
+ @change="checkDateValidity('ntcEndDt', $event)" |
|
111 |
+ /> |
|
112 |
+ </div> |
|
113 |
+ </div> |
|
114 |
+ </div> |
|
115 |
+ <div class="layout" ref="five" v-if="bbsMng.prvtPstUseYn === 'Y'" > |
|
116 |
+ <label class="form-title">비밀글</label> |
|
117 |
+ <div class="check-area"> |
|
118 |
+ <div class="form-check"> |
|
69 | 119 |
<input |
70 |
- v-if="fileList.length < 1" |
|
71 |
- class="upload-name full-input" |
|
72 |
- placeholder="첨부파일이 없습니다." |
|
73 |
- disabled |
|
120 |
+ type="radio" |
|
121 |
+ name="private" |
|
122 |
+ id="private-y" |
|
123 |
+ class="mr5" |
|
124 |
+ value="Y" |
|
125 |
+ v-model="bbsCn.prvtPstYn" |
|
74 | 126 |
/> |
75 |
- <ul v-else class="pl10 pr10 border radius align-center"> |
|
76 |
- <li |
|
77 |
- v-for="(file, idx) in fileList" |
|
78 |
- :key="idx" |
|
79 |
- class="file-wrap" |
|
80 |
- > |
|
81 |
- <p v-if="file['fileId'] != null"> |
|
82 |
- {{ file["fileNm"] }}.{{ file["extnNm"] }} |
|
83 |
- <button |
|
84 |
- class="del-btn" |
|
85 |
- @click="fnFileDelete(file, idx)" |
|
86 |
- > |
|
87 |
- X |
|
88 |
- </button> |
|
89 |
- </p> |
|
90 |
- <p v-else> |
|
91 |
- {{ file.name }} |
|
92 |
- <button |
|
93 |
- class="del-btn" |
|
94 |
- @click="fnFileDelete(file, idx)" |
|
95 |
- > |
|
96 |
- X |
|
97 |
- </button> |
|
98 |
- </p> |
|
99 |
- </li> |
|
100 |
- </ul> |
|
127 |
+ <label for="private-y">사용</label> |
|
128 |
+ </div> |
|
129 |
+ <div class="form-check"> |
|
130 |
+ <input |
|
131 |
+ type="radio" |
|
132 |
+ name="private" |
|
133 |
+ id="private-n" |
|
134 |
+ class="mr5" |
|
135 |
+ value="N" |
|
136 |
+ v-model="bbsCn.prvtPstYn" |
|
137 |
+ /> |
|
138 |
+ <label for="private-n">미사용</label> |
|
101 | 139 |
</div> |
102 | 140 |
</div> |
103 |
- <div class="gd-2"> |
|
104 |
- <label for="file" class="large-btn green-border-btn text-ct" |
|
105 |
- >파일찾기</label |
|
106 |
- > |
|
107 |
- <input |
|
108 |
- type="file" |
|
109 |
- id="file" |
|
110 |
- ref="file" |
|
111 |
- @change="fnFileInsert" |
|
112 |
- multiple |
|
113 |
- /> |
|
114 |
- </div> |
|
115 | 141 |
</div> |
116 |
- </td> |
|
117 |
- </tr> |
|
118 |
- <tr v-if="bbsMng.ntcUseYn === 'Y'" class="border-top"> |
|
119 |
- <th |
|
120 |
- :class="{ |
|
121 |
- 'text-lf': true, |
|
122 |
- 'point-font2': pageRole == 'adm', |
|
123 |
- 'point-font': pageRole == 'portal', |
|
124 |
- }" |
|
125 |
- > |
|
126 |
- 공지글 |
|
127 |
- </th> |
|
128 |
- <td colspan="3"> |
|
129 |
- <div class="flex align-center no-gutters"> |
|
130 |
- <div class="gd-4"> |
|
131 |
- <input |
|
132 |
- type="radio" |
|
133 |
- name="notice" |
|
134 |
- id="notice-y" |
|
135 |
- class="mr5" |
|
136 |
- value="Y" |
|
137 |
- v-model="bbsCn.ntcPstYn" |
|
138 |
- /> |
|
139 |
- <label for="notice-y">사용</label> |
|
140 |
- </div> |
|
141 |
- <div class="gd-4"> |
|
142 |
- <input |
|
143 |
- type="radio" |
|
144 |
- name="notice" |
|
145 |
- id="notice-n" |
|
146 |
- class="mr5" |
|
147 |
- value="N" |
|
148 |
- v-model="bbsCn.ntcPstYn" |
|
149 |
- /> |
|
150 |
- <label for="notice-n">미사용</label> |
|
151 |
- </div> |
|
152 |
- </div> |
|
153 |
- </td> |
|
154 |
- </tr> |
|
155 |
- <tr v-if="bbsCn.ntcPstYn === 'Y'" class="border-top"> |
|
156 |
- <th |
|
157 |
- :class="{ |
|
158 |
- 'text-lf': true, |
|
159 |
- 'point-font2': pageRole == 'adm', |
|
160 |
- 'point-font': pageRole == 'portal', |
|
161 |
- }" |
|
162 |
- > |
|
163 |
- 공지글 게시기간 |
|
164 |
- </th> |
|
165 |
- <td colspan="3"> |
|
166 |
- <div class="flex align-center no-gutters"> |
|
167 |
- <div class="gd-4"> |
|
168 |
- <input |
|
169 |
- type="date" |
|
170 |
- class="full-input ml0" |
|
171 |
- v-model="bbsCn.ntcBgngDt" |
|
172 |
- @change="checkDateValidity('ntcBgngDt', $event)" |
|
173 |
- /> |
|
174 |
- </div> |
|
175 |
- <div class="pd10">-</div> |
|
176 |
- <div class="gd-4"> |
|
177 |
- <input |
|
178 |
- type="date" |
|
179 |
- class="full-input ml0" |
|
180 |
- v-model="bbsCn.ntcEndDt" |
|
181 |
- @change="checkDateValidity('ntcEndDt', $event)" |
|
182 |
- /> |
|
183 |
- </div> |
|
184 |
- </div> |
|
185 |
- </td> |
|
186 |
- </tr> |
|
187 |
- <tr v-if="bbsMng.prvtPstUseYn === 'Y'" class="border-top"> |
|
188 |
- <th |
|
189 |
- :class="{ |
|
190 |
- 'text-lf': true, |
|
191 |
- 'point-font2': pageRole == 'adm', |
|
192 |
- 'point-font': pageRole == 'portal', |
|
193 |
- }" |
|
194 |
- > |
|
195 |
- 비밀글 |
|
196 |
- </th> |
|
197 |
- <td colspan="3"> |
|
198 |
- <div class="flex align-center no-gutters"> |
|
199 |
- <div class="gd-4"> |
|
200 |
- <input |
|
201 |
- type="radio" |
|
202 |
- name="private" |
|
203 |
- id="private-y" |
|
204 |
- class="mr5" |
|
205 |
- value="Y" |
|
206 |
- v-model="bbsCn.prvtPstYn" |
|
207 |
- /> |
|
208 |
- <label for="private-y">사용</label> |
|
209 |
- </div> |
|
210 |
- <div class="gd-4"> |
|
211 |
- <input |
|
212 |
- type="radio" |
|
213 |
- name="private" |
|
214 |
- id="private-n" |
|
215 |
- class="mr5" |
|
216 |
- value="N" |
|
217 |
- v-model="bbsCn.prvtPstYn" |
|
218 |
- /> |
|
219 |
- <label for="private-n">미사용</label> |
|
220 |
- </div> |
|
221 |
- </div> |
|
222 |
- </td> |
|
223 |
- </tr> |
|
224 |
- </tbody> |
|
225 |
- </table> |
|
226 |
- <div class="flex justify-end align-center no-gutters"> |
|
227 |
- <div class="gd-1 mr10"> |
|
228 |
- <button |
|
229 |
- v-if="ansPageId == null" |
|
230 |
- :class="{ |
|
231 |
- 'large-btn': true, |
|
232 |
- 'blue-btn': pageRole == 'adm', |
|
233 |
- 'green-btn': pageRole == 'portal', |
|
234 |
- }" |
|
235 |
- @click="fnInsert" |
|
236 |
- > |
|
237 |
- {{ bbsCn.bbsId == null ? "등록" : "수정" }} |
|
238 |
- </button> |
|
239 |
- <button |
|
240 |
- v-else |
|
241 |
- class="large-btn blue-btn" |
|
242 |
- :class="{ |
|
243 |
- 'large-btn': true, |
|
244 |
- 'blue-btn': pageRole == 'adm', |
|
245 |
- 'green-btn': pageRole == 'portal', |
|
246 |
- }" |
|
247 |
- @click="fnAnsInsert" |
|
248 |
- > |
|
249 |
- {{ bbsCn.ansStts == "N" ? "답변 등록" : "답변 수정" }} |
|
250 |
- </button> |
|
251 |
- </div> |
|
252 |
- <div class="gd-1"> |
|
253 |
- <button class="large-btn gray-btn" @click="fnCancel">취소</button> |
|
142 |
+ </div> |
|
143 |
+ </div> |
|
254 | 144 |
</div> |
255 | 145 |
</div> |
146 |
+ </div> |
|
147 |
+ <div class="btn-wrap"> |
|
148 |
+ <button |
|
149 |
+ v-if="ansPageId == null" |
|
150 |
+ class="btn sm main" |
|
151 |
+ @click="fnInsert" |
|
152 |
+ > |
|
153 |
+ {{ bbsCn.bbsId == null ? "등록" : "수정" }} |
|
154 |
+ </button> |
|
155 |
+ <button |
|
156 |
+ v-else |
|
157 |
+ class="btn sm main" |
|
158 |
+ @click="fnAnsInsert" |
|
159 |
+ > |
|
160 |
+ {{ bbsCn.ansStts == "N" ? "답변 등록" : "답변 수정" }} |
|
161 |
+ </button> |
|
162 |
+ <button class="btn sm tertiary" @click="fnCancel">취소</button> |
|
256 | 163 |
</div> |
257 | 164 |
</template> |
258 | 165 |
|
... | ... | @@ -518,10 +425,59 @@ |
518 | 425 |
path: this.path + "/list.page", |
519 | 426 |
}); |
520 | 427 |
}, |
428 |
+ |
|
429 |
+ updateHeight() { |
|
430 |
+ this.$nextTick(() => { |
|
431 |
+ const first = this.$refs.first; |
|
432 |
+ const two = this.$refs.two; |
|
433 |
+ const three = this.$refs.three; |
|
434 |
+ const fore = this.$refs.fore; |
|
435 |
+ const five = this.$refs.five; |
|
436 |
+ |
|
437 |
+ let total = 0; |
|
438 |
+ if (two) total += two.offsetHeight; |
|
439 |
+ if (three) total += three.offsetHeight; |
|
440 |
+ if (fore) total += fore.offsetHeight; |
|
441 |
+ if (five) total += five.offsetHeight; |
|
442 |
+ |
|
443 |
+ if (first) { |
|
444 |
+ first.style.height = `calc(100% - ${total}px)`; |
|
445 |
+ } |
|
446 |
+ }); |
|
447 |
+ }, |
|
448 |
+ |
|
521 | 449 |
}, |
522 |
- watch: {}, |
|
523 |
- computed: {}, |
|
450 |
+ watch: { |
|
451 |
+ bbsMng: { |
|
452 |
+ handler() { |
|
453 |
+ this.$nextTick(() => { |
|
454 |
+ this.updateHeight(); |
|
455 |
+ }); |
|
456 |
+ }, |
|
457 |
+ deep: true, |
|
458 |
+ }, |
|
459 |
+ bbsCn: { |
|
460 |
+ handler() { |
|
461 |
+ this.$nextTick(() => { |
|
462 |
+ this.updateHeight(); |
|
463 |
+ }); |
|
464 |
+ }, |
|
465 |
+ deep: true, |
|
466 |
+ }, |
|
467 |
+ |
|
468 |
+ }, |
|
469 |
+ computed: { |
|
470 |
+ |
|
471 |
+ }, |
|
524 | 472 |
components: {}, |
525 |
- mounted() {}, |
|
473 |
+ mounted() { |
|
474 |
+ this.updateHeight(); |
|
475 |
+ |
|
476 |
+ // 창 크기 변경 시에도 대응하고 싶다면: |
|
477 |
+ window.addEventListener('resize', this.updateHeight); |
|
478 |
+ }, |
|
479 |
+ beforeUnmount() { |
|
480 |
+ window.removeEventListener('resize', this.updateHeight); |
|
481 |
+ }, |
|
526 | 482 |
}; |
527 | 483 |
</script> |
--- client/views/pages/adm/boardManagement/template/faqTemplate/FaqSelectList.vue
+++ client/views/pages/adm/boardManagement/template/faqTemplate/FaqSelectList.vue
... | ... | @@ -239,10 +239,13 @@ |
239 | 239 |
<tbody> |
240 | 240 |
<template v-for="(item, idx) in list" :key="idx"> |
241 | 241 |
<tr @click="toggle(idx)"> |
242 |
- <td>{{ item.ansStts == "N" ? "미답변" : "답변완료" }}</td> |
|
242 |
+ <td> |
|
243 |
+ <span v-if="item.ansStts == 'N'" class="state red">미답변</span> |
|
244 |
+ <span v-else class="state blue">답변완료</span> |
|
245 |
+ </td> |
|
243 | 246 |
<td> |
244 | 247 |
<div class="layout"> |
245 |
- <span>Q.</span> |
|
248 |
+ <span class="state question">Q</span> |
|
246 | 249 |
<div v-if="item.prvtPstYn == 'Y'"> |
247 | 250 |
<!-- {{ item.rgtr == mbrId || roles == 'ROLE_ADMIN' ? item.bbsCn : '[ 비밀글입니다 ]' }} --> |
248 | 251 |
<p |
... | ... | @@ -262,30 +265,33 @@ |
262 | 265 |
<td>{{ item.rgtrNm }}</td> |
263 | 266 |
<td>{{ item.regDt }}</td> |
264 | 267 |
<td> |
265 |
- <div> |
|
268 |
+ <div class="icon-btn-zone"> |
|
266 | 269 |
<template v-if="item.rgtr == mbrId || roles == 'ROLE_ADMIN'"> |
267 |
- <button class="btn sm primary" |
|
270 |
+ <button class="btn-ico md ico-update" |
|
268 | 271 |
@click="fnUpdate(item.bbsId)" |
272 |
+ title="수정" |
|
269 | 273 |
> |
270 |
- 수정 |
|
274 |
+ <span class="sr-only">수정</span> |
|
271 | 275 |
</button> |
272 | 276 |
<button |
273 |
- class="btn sm red" |
|
277 |
+ class="btn-ico md ico-del red" |
|
274 | 278 |
@click="fnDelete(item)" |
279 |
+ title="삭제" |
|
275 | 280 |
> |
276 |
- 삭제 |
|
281 |
+ <span class="sr-only">삭제</span> |
|
277 | 282 |
</button> |
278 | 283 |
</template> |
279 |
- <div |
|
284 |
+ <template |
|
280 | 285 |
v-if="roles == 'ROLE_ADMIN' && item.ansCn == null" |
281 | 286 |
> |
282 | 287 |
<button |
283 |
- class="btn sm btn-chip-outline primary" |
|
288 |
+ class="btn-ico md ico-comment" |
|
284 | 289 |
@click="fnAnswer(item.bbsId)" |
290 |
+ title="답변" |
|
285 | 291 |
> |
286 |
- 답변 |
|
292 |
+ <span class="sr-only">답변</span> |
|
287 | 293 |
</button> |
288 |
- </div> |
|
294 |
+ </template> |
|
289 | 295 |
</div> |
290 | 296 |
</td> |
291 | 297 |
</tr> |
... | ... | @@ -293,7 +299,7 @@ |
293 | 299 |
<td></td> |
294 | 300 |
<td colspan="3"> |
295 | 301 |
<div class="layout"> |
296 |
- <span>A.</span> |
|
302 |
+ <span class="state answer">A</span> |
|
297 | 303 |
<div v-if="item.prvtPstYn == 'Y'"> |
298 | 304 |
<!-- {{ item.rgtr == mbrId || roles == 'ROLE_ADMIN' ? item.ansCn : '[ 비밀 답글입니다 ]' }} --> |
299 | 305 |
<p |
--- client/views/pages/adm/boardManagement/template/galleryTemplate/GalleryInsert.vue
+++ client/views/pages/adm/boardManagement/template/galleryTemplate/GalleryInsert.vue
... | ... | @@ -1,152 +1,87 @@ |
1 | 1 |
<template> |
2 |
- <div |
|
3 |
- :class="{ |
|
4 |
- content: true, |
|
5 |
- 'admin-style overflow-y': pageRole === 'adm', |
|
6 |
- 'w1400 pt50 pb50': pageRole === 'portal', |
|
7 |
- }" |
|
8 |
- > |
|
9 |
- <div |
|
10 |
- :class="{ |
|
11 |
- 'admin-page-title point-font2 mb30': pageRole == 'adm', |
|
12 |
- 'page-title point-font mb30': pageRole == 'portal', |
|
13 |
- }" |
|
14 |
- > |
|
15 |
- <p>{{ bbsMng.bbsNm }}</p> |
|
16 |
- </div> |
|
17 |
- <table class="form-table mb30"> |
|
18 |
- <colgroup> |
|
19 |
- <col width="10%" /> |
|
20 |
- <col width="90%" /> |
|
21 |
- </colgroup> |
|
22 |
- <tbody> |
|
23 |
- <tr> |
|
24 |
- <th |
|
25 |
- :class="{ |
|
26 |
- 'text-lf': true, |
|
27 |
- 'point-font2': pageRole == 'adm', |
|
28 |
- 'point-font': pageRole == 'portal', |
|
29 |
- }" |
|
30 |
- > |
|
31 |
- <span>제목</span> |
|
32 |
- </th> |
|
33 |
- <td> |
|
34 |
- <input |
|
35 |
- type="text" |
|
36 |
- class="full-input" |
|
37 |
- v-model="bbsCn.bbsNm" |
|
38 |
- placeholder="제목을 입력하세요." |
|
39 |
- /> |
|
40 |
- </td> |
|
41 |
- </tr> |
|
42 |
- <tr class="border-top"> |
|
43 |
- <th |
|
44 |
- colspan="4" |
|
45 |
- :class="{ |
|
46 |
- 'text-lf': true, |
|
47 |
- 'point-font2': pageRole == 'adm', |
|
48 |
- 'point-font': pageRole == 'portal', |
|
49 |
- }" |
|
50 |
- > |
|
51 |
- <span>내용</span> |
|
52 |
- </th> |
|
53 |
- </tr> |
|
54 |
- <tr> |
|
55 |
- <td colspan="4"> |
|
56 |
- <!-- <textarea name="smart" id="smart" style="width:100%"></textarea> --> |
|
57 |
- <ckeditorComponent |
|
58 |
- ref="ckeditor5" |
|
59 |
- :bbsCn.sync="bbsCn" |
|
60 |
- ></ckeditorComponent> |
|
61 |
- </td> |
|
62 |
- </tr> |
|
63 |
- <tr> |
|
64 |
- <th |
|
65 |
- :class="{ |
|
66 |
- 'text-lf': true, |
|
67 |
- 'point-font2': pageRole == 'adm', |
|
68 |
- 'point-font': pageRole == 'portal', |
|
69 |
- }" |
|
70 |
- > |
|
71 |
- <span>이미지파일</span> |
|
72 |
- </th> |
|
73 |
- <td colspan="4"> |
|
74 |
- <div class="gd-12 pr0"> |
|
75 |
- <div class="flex align-center"> |
|
76 |
- <div class="gd-2 pl0 pr0"> |
|
77 |
- <label |
|
78 |
- for="imgFile" |
|
79 |
- :class="{ |
|
80 |
- 'large-btn text-ct': true, |
|
81 |
- 'blue-border-btn': pageRole == 'adm', |
|
82 |
- 'green-border-btn': |
|
83 |
- pageRole == 'portal', |
|
84 |
- }" |
|
85 |
- > |
|
86 |
- 파일찾기 |
|
87 |
- </label> |
|
88 |
- <input |
|
89 |
- type="file" |
|
90 |
- id="imgFile" |
|
91 |
- ref="imgFile" |
|
92 |
- @change="fnImgFileInsert" |
|
93 |
- multiple |
|
94 |
- accept="image/*" |
|
95 |
- /> |
|
96 |
- </div> |
|
97 |
- <div class="gd-12 pl0"> |
|
98 |
- <div> |
|
99 |
- <ul v-if="imgFileList.length > 0"> |
|
100 |
- <li |
|
101 |
- v-for="(file, idx) in imgFileList" |
|
102 |
- :key="idx" |
|
103 |
- class="file-wrap pd10 mt10 border radius" |
|
104 |
- > |
|
105 |
- <div |
|
106 |
- v-if="file['fileId'] != null" |
|
107 |
- class="flex align-center justify-between file-wrap" |
|
108 |
- > |
|
109 |
- <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
110 |
- <button |
|
111 |
- class="del-btn" |
|
112 |
- @click="fnImgFileDelete(file, idx)" |
|
113 |
- > |
|
114 |
- X |
|
115 |
- </button> |
|
116 |
- </div> |
|
117 |
- <div |
|
118 |
- v-else |
|
119 |
- class="flex align-center justify-between file-wrap" |
|
120 |
- > |
|
121 |
- <p>{{ file.name }}</p> |
|
122 |
- <button |
|
123 |
- class="del-btn" |
|
124 |
- @click="fnImgFileDelete(file, idx)" |
|
125 |
- > |
|
126 |
- X |
|
127 |
- </button> |
|
128 |
- </div> |
|
129 |
- </li> |
|
130 |
- </ul> |
|
131 |
- </div> |
|
132 |
- </div> |
|
2 |
+ <div class="content-zone sch-full"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="form-box h_100"> |
|
6 |
+ <div class="form-box-title"> |
|
7 |
+ <p>기본정보</p> |
|
8 |
+ <p><span>*</span>필수입력</p> |
|
9 |
+ </div> |
|
10 |
+ <div class="form-content grid-none"> |
|
11 |
+ <div class="layout"> |
|
12 |
+ <label for="" class="form-title">제목</label> |
|
13 |
+ <input |
|
14 |
+ type="text" |
|
15 |
+ class="form-control sm" |
|
16 |
+ v-model="bbsCn.bbsNm" |
|
17 |
+ placeholder="제목을 입력하세요." |
|
18 |
+ /> |
|
19 |
+ </div> |
|
20 |
+ <div class="layout" ref="first"> |
|
21 |
+ <label for="" class="form-title">내용</label> |
|
22 |
+ <div class="w_100 h_100"> |
|
23 |
+ <ckeditorComponent ref="ckeditor5" :bbsCn.sync="bbsCn"></ckeditorComponent> |
|
133 | 24 |
</div> |
134 | 25 |
</div> |
135 |
- </td> |
|
136 |
- </tr> |
|
137 |
- <tr v-if="bbsMng.atchFileUseYn === 'Y'" class="border-top"> |
|
138 |
- <th |
|
139 |
- :class="{ |
|
140 |
- 'text-lf': true, |
|
141 |
- 'point-font2': pageRole == 'adm', |
|
142 |
- 'point-font': pageRole == 'portal', |
|
143 |
- }" |
|
144 |
- > |
|
145 |
- 첨부파일 |
|
146 |
- </th> |
|
147 |
- <td colspan="2"> |
|
148 |
- <div class="gd-12 pr0"> |
|
149 |
- <div class="gd-2 pl0 pr0"> |
|
26 |
+ <div class="layout"> |
|
27 |
+ <label for="" class="form-title">이미지 파일</label> |
|
28 |
+ <div> |
|
29 |
+ <label |
|
30 |
+ for="imgFile" |
|
31 |
+ :class="{ |
|
32 |
+ 'large-btn text-ct': true, |
|
33 |
+ 'blue-border-btn': pageRole == 'adm', |
|
34 |
+ 'green-border-btn': |
|
35 |
+ pageRole == 'portal', |
|
36 |
+ }" |
|
37 |
+ > |
|
38 |
+ 파일찾기 |
|
39 |
+ </label> |
|
40 |
+ <input |
|
41 |
+ type="file" |
|
42 |
+ id="imgFile" |
|
43 |
+ ref="imgFile" |
|
44 |
+ @change="fnImgFileInsert" |
|
45 |
+ multiple |
|
46 |
+ accept="image/*" |
|
47 |
+ /> |
|
48 |
+ <ul v-if="imgFileList.length > 0"> |
|
49 |
+ <li |
|
50 |
+ v-for="(file, idx) in imgFileList" |
|
51 |
+ :key="idx" |
|
52 |
+ class="file-wrap" |
|
53 |
+ > |
|
54 |
+ <div |
|
55 |
+ v-if="file['fileId'] != null" |
|
56 |
+ class="layout" |
|
57 |
+ > |
|
58 |
+ <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
59 |
+ <button |
|
60 |
+ class="del-btn" |
|
61 |
+ @click="fnImgFileDelete(file, idx)" |
|
62 |
+ > |
|
63 |
+ X |
|
64 |
+ </button> |
|
65 |
+ </div> |
|
66 |
+ <div |
|
67 |
+ v-else |
|
68 |
+ class="layout" |
|
69 |
+ > |
|
70 |
+ <p>{{ file.name }}</p> |
|
71 |
+ <button |
|
72 |
+ class="del-btn" |
|
73 |
+ @click="fnImgFileDelete(file, idx)" |
|
74 |
+ > |
|
75 |
+ X |
|
76 |
+ </button> |
|
77 |
+ </div> |
|
78 |
+ </li> |
|
79 |
+ </ul> |
|
80 |
+ </div> |
|
81 |
+ </div> |
|
82 |
+ <div class="layout" ref="two" v-if="bbsMng.atchFileUseYn === 'Y'" > |
|
83 |
+ <label for="" class="form-title">첨부파일</label> |
|
84 |
+ <div> |
|
150 | 85 |
<label |
151 | 86 |
for="file" |
152 | 87 |
:class="{ |
... | ... | @@ -164,156 +99,138 @@ |
164 | 99 |
ref="file" |
165 | 100 |
@change="fnFileInsert" |
166 | 101 |
multiple |
167 |
- /> |
|
168 |
- </div> |
|
169 |
- <div class="gd-12 pl0" v-if="fileList.length > 0"> |
|
170 |
- <ul> |
|
171 |
- <li |
|
172 |
- v-for="(file, idx) in fileList" |
|
173 |
- :key="idx" |
|
174 |
- class="pd10 mt10 border radius" |
|
175 |
- > |
|
176 |
- <div |
|
177 |
- v-if="file['fileId'] != null" |
|
178 |
- class="flex align-center justify-between file-wrap" |
|
102 |
+ /> |
|
103 |
+ <ul v-if="fileList.length > 0"> |
|
104 |
+ <li |
|
105 |
+ v-for="(file, idx) in fileList" |
|
106 |
+ :key="idx" |
|
107 |
+ class="pd10 mt10 border radius" |
|
179 | 108 |
> |
180 |
- <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
181 |
- <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
182 |
- X |
|
183 |
- </button> |
|
184 |
- </div> |
|
185 |
- <div |
|
186 |
- v-else |
|
187 |
- class="flex align-center justify-between file-wrap" |
|
188 |
- > |
|
189 |
- <p>{{ file.name }}</p> |
|
190 |
- <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
191 |
- X |
|
192 |
- </button> |
|
193 |
- </div> |
|
194 |
- </li> |
|
109 |
+ <div |
|
110 |
+ v-if="file['fileId'] != null" |
|
111 |
+ class="flex align-center justify-between file-wrap" |
|
112 |
+ > |
|
113 |
+ <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
114 |
+ <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
115 |
+ X |
|
116 |
+ </button> |
|
117 |
+ </div> |
|
118 |
+ <div |
|
119 |
+ v-else |
|
120 |
+ class="flex align-center justify-between file-wrap" |
|
121 |
+ > |
|
122 |
+ <p>{{ file.name }}</p> |
|
123 |
+ <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
124 |
+ X |
|
125 |
+ </button> |
|
126 |
+ </div> |
|
127 |
+ </li> |
|
195 | 128 |
</ul> |
196 | 129 |
</div> |
197 | 130 |
</div> |
198 |
- </td> |
|
199 |
- </tr> |
|
200 |
- <tr v-if="bbsMng.ntcUseYn === 'Y'" class="border-top"> |
|
201 |
- <th |
|
202 |
- :class="{ |
|
203 |
- 'text-lf': true, |
|
204 |
- 'point-font2': pageRole == 'adm', |
|
205 |
- 'point-font': pageRole == 'portal', |
|
206 |
- }" |
|
207 |
- > |
|
208 |
- 공지글 |
|
209 |
- </th> |
|
210 |
- <td colspan="3"> |
|
211 |
- <div class="flex align-center no-gutters"> |
|
212 |
- <div class="gd-4"> |
|
213 |
- <input |
|
214 |
- type="radio" |
|
215 |
- name="notice" |
|
216 |
- id="y" |
|
217 |
- class="mr5" |
|
218 |
- value="Y" |
|
219 |
- v-model="bbsCn.ntcPstYn" |
|
220 |
- /> |
|
221 |
- <label for="y">사용</label> |
|
222 |
- </div> |
|
223 |
- <div class="gd-4"> |
|
224 |
- <input |
|
225 |
- type="radio" |
|
226 |
- name="notice" |
|
227 |
- id="n" |
|
228 |
- class="mr5" |
|
229 |
- value="N" |
|
230 |
- v-model="bbsCn.ntcPstYn" |
|
231 |
- /> |
|
232 |
- <label for="n">미사용</label> |
|
131 |
+ <div class="layout" ref="three" v-if="bbsMng.ntcUseYn === 'Y'"> |
|
132 |
+ <label for="" class="form-title">공지글</label> |
|
133 |
+ <div class="check-area"> |
|
134 |
+ <div class="form-check"> |
|
135 |
+ <input |
|
136 |
+ type="radio" |
|
137 |
+ name="notice" |
|
138 |
+ id="y" |
|
139 |
+ class="mr5" |
|
140 |
+ value="Y" |
|
141 |
+ v-model="bbsCn.ntcPstYn" |
|
142 |
+ /> |
|
143 |
+ <label for="y">사용</label> |
|
144 |
+ </div> |
|
145 |
+ <div class="form-check"> |
|
146 |
+ <input |
|
147 |
+ type="radio" |
|
148 |
+ name="notice" |
|
149 |
+ id="n" |
|
150 |
+ class="mr5" |
|
151 |
+ value="N" |
|
152 |
+ v-model="bbsCn.ntcPstYn" |
|
153 |
+ /> |
|
154 |
+ <label for="n">미사용</label> |
|
155 |
+ </div> |
|
233 | 156 |
</div> |
234 | 157 |
</div> |
235 |
- </td> |
|
236 |
- </tr> |
|
237 |
- <tr v-if="bbsCn.ntcPstYn === 'Y'" class="border-top"> |
|
238 |
- <th class="point-font2 text-lf">공지글 게시기간</th> |
|
239 |
- <td colspan="3"> |
|
240 |
- <div class="flex align-center no-gutters"> |
|
241 |
- <div class="gd-4"> |
|
242 |
- <input |
|
243 |
- type="datetime-local" |
|
244 |
- class="full-input ml0" |
|
245 |
- v-model="bbsCn.ntcBgngDt" |
|
246 |
- @change="checkDateValidity('ntcBgngDt', $event)" |
|
247 |
- /> |
|
248 |
- </div> |
|
249 |
- <div class="pd10">-</div> |
|
250 |
- <div class="gd-4"> |
|
251 |
- <input |
|
252 |
- type="datetime-local" |
|
253 |
- class="full-input ml0" |
|
254 |
- v-model="bbsCn.ntcEndDt" |
|
255 |
- @change="checkDateValidity('ntcEndDt', $event)" |
|
256 |
- /> |
|
158 |
+ <div class="layout" ref="four" v-if="bbsCn.ntcPstYn === 'Y'"> |
|
159 |
+ <label for="" class="form-title" >공지글 게시기간</label> |
|
160 |
+ <div class="flex align-center no-gutters"> |
|
161 |
+ <div class="form-control sm cal"> |
|
162 |
+ <VueDatePicker |
|
163 |
+ InlineOptions |
|
164 |
+ placeholder="시작일" |
|
165 |
+ locale="ko" |
|
166 |
+ :enable-time-picker="false" |
|
167 |
+ :format="formatDate" |
|
168 |
+ v-model="bbsCn.ntcBgngDt" |
|
169 |
+ @update:model-value="checkDateValidity('ntcBgngDt',$event)" |
|
170 |
+ /> |
|
171 |
+ <!-- <input |
|
172 |
+ type="datetime-local" |
|
173 |
+ class="full-input ml0" |
|
174 |
+ v-model="bbsCn.ntcBgngDt" |
|
175 |
+ @change="checkDateValidity('ntcBgngDt', $event)" |
|
176 |
+ /> --> |
|
177 |
+ </div> |
|
178 |
+ <div class="mark">-</div> |
|
179 |
+ <div class="form-control sm cal"> |
|
180 |
+ <VueDatePicker |
|
181 |
+ InlineOptions |
|
182 |
+ placeholder="종료일" |
|
183 |
+ locale="ko" |
|
184 |
+ :enable-time-picker="false" |
|
185 |
+ :format="formatDate" |
|
186 |
+ v-model="bbsCn.ntcEndDt" |
|
187 |
+ @update:model-value="checkDateValidity('ntcEndDt',$event)" |
|
188 |
+ /> |
|
189 |
+ <!-- <input |
|
190 |
+ type="datetime-local" |
|
191 |
+ class="full-input ml0" |
|
192 |
+ v-model="bbsCn.ntcEndDt" |
|
193 |
+ @change="checkDateValidity('ntcEndDt', $event)" |
|
194 |
+ /> --> |
|
195 |
+ </div> |
|
257 | 196 |
</div> |
258 | 197 |
</div> |
259 |
- </td> |
|
260 |
- </tr> |
|
261 |
- <tr v-if="bbsMng.prvtPstUseYn === 'Y'" class="border-top"> |
|
262 |
- <th |
|
263 |
- :class="{ |
|
264 |
- 'text-lf': true, |
|
265 |
- 'point-font2': pageRole == 'adm', |
|
266 |
- 'point-font': pageRole == 'portal', |
|
267 |
- }" |
|
268 |
- > |
|
269 |
- 비밀글 |
|
270 |
- </th> |
|
271 |
- <td colspan="3"> |
|
272 |
- <div class="flex align-center no-gutters"> |
|
273 |
- <div class="gd-4"> |
|
274 |
- <input |
|
275 |
- type="radio" |
|
276 |
- name="secret" |
|
277 |
- id="y" |
|
278 |
- class="mr5" |
|
279 |
- value="Y" |
|
280 |
- v-model="bbsCn.prvtPstYn" |
|
281 |
- /> |
|
282 |
- <label for="y">사용</label> |
|
283 |
- </div> |
|
284 |
- <div class="gd-4"> |
|
285 |
- <input |
|
286 |
- type="radio" |
|
287 |
- name="secret" |
|
288 |
- id="n" |
|
289 |
- class="mr5" |
|
290 |
- value="N" |
|
291 |
- v-model="bbsCn.prvtPstYn" |
|
292 |
- /> |
|
293 |
- <label for="n">미사용</label> |
|
198 |
+ <div class="layout" ref="five" v-if="bbsMng.prvtPstUseYn === 'Y'"> |
|
199 |
+ <label for="" class="form-title">비밀글</label> |
|
200 |
+ <div class="check-area"> |
|
201 |
+ <div class="form-check"> |
|
202 |
+ <input |
|
203 |
+ type="radio" |
|
204 |
+ name="secret" |
|
205 |
+ id="y" |
|
206 |
+ class="mr5" |
|
207 |
+ value="Y" |
|
208 |
+ v-model="bbsCn.prvtPstYn" |
|
209 |
+ /> |
|
210 |
+ <label for="y">사용</label> |
|
211 |
+ </div> |
|
212 |
+ <div class="form-check"> |
|
213 |
+ <input |
|
214 |
+ type="radio" |
|
215 |
+ name="secret" |
|
216 |
+ id="n" |
|
217 |
+ class="mr5" |
|
218 |
+ value="N" |
|
219 |
+ v-model="bbsCn.prvtPstYn" |
|
220 |
+ /> |
|
221 |
+ <label for="n">미사용</label> |
|
222 |
+ </div> |
|
294 | 223 |
</div> |
295 | 224 |
</div> |
296 |
- </td> |
|
297 |
- </tr> |
|
298 |
- </tbody> |
|
299 |
- </table> |
|
300 |
- <div class="flex justify-end align-center no-gutters"> |
|
301 |
- <div class="gd-1 mr10"> |
|
302 |
- <button |
|
303 |
- :class="{ |
|
304 |
- 'large-btn': true, |
|
305 |
- 'blue-btn': pageRole == 'adm', |
|
306 |
- 'green-btn': pageRole == 'portal', |
|
307 |
- }" |
|
308 |
- @click="fnInsert" |
|
309 |
- > |
|
310 |
- {{ bbsCn.bbsId == null ? "등록" : "수정" }} |
|
311 |
- </button> |
|
312 |
- </div> |
|
313 |
- <div class="gd-1"> |
|
314 |
- <button class="large-btn gray-btn" @click="fnCancel">취소</button> |
|
225 |
+ </div> |
|
226 |
+ </div> |
|
315 | 227 |
</div> |
316 | 228 |
</div> |
229 |
+ </div> |
|
230 |
+ |
|
231 |
+ <div class="btn-wrap"> |
|
232 |
+ <button class="btn sm main" @click="fnInsert">{{ bbsCn.bbsId == null ? "등록" : "수정" }}</button> |
|
233 |
+ <button class="btn sm tertiary" @click="fnCancel">취소</button> |
|
317 | 234 |
</div> |
318 | 235 |
</template> |
319 | 236 |
|
... | ... | @@ -689,6 +606,32 @@ |
689 | 606 |
|
690 | 607 |
// }); |
691 | 608 |
// } |
609 |
+ // 날짜포맷 |
|
610 |
+ formatDate(date) { |
|
611 |
+ const year = date.getFullYear(); |
|
612 |
+ const month = ('00' + (date.getMonth() + 1)).slice(-2); |
|
613 |
+ const day = ('00' + date.getDate()).slice(-2); |
|
614 |
+ return `${year}-${month}-${day}`; |
|
615 |
+ }, |
|
616 |
+ updateHeight() { |
|
617 |
+ this.$nextTick(() => { |
|
618 |
+ const first = this.$refs.first; |
|
619 |
+ const two = this.$refs.two; |
|
620 |
+ const three = this.$refs.three; |
|
621 |
+ const fore = this.$refs.fore; |
|
622 |
+ const five = this.$refs.five; |
|
623 |
+ |
|
624 |
+ let total = 0; |
|
625 |
+ if (two) total += two.offsetHeight; |
|
626 |
+ if (three) total += three.offsetHeight; |
|
627 |
+ if (fore) total += fore.offsetHeight; |
|
628 |
+ if (five) total += five.offsetHeight; |
|
629 |
+ |
|
630 |
+ if (first) { |
|
631 |
+ first.style.height = `calc(100% - ${total}px - 51px - 48px)`; |
|
632 |
+ } |
|
633 |
+ }); |
|
634 |
+ }, |
|
692 | 635 |
}, |
693 | 636 |
watch: { |
694 | 637 |
"bbsCn.ntcPstYn": function (val) { |
... | ... | @@ -701,11 +644,35 @@ |
701 | 644 |
this.bbsCn.ntcEndDt == null ? now : this.bbsCn.ntcEndDt; |
702 | 645 |
} |
703 | 646 |
}, |
647 |
+ bbsMng: { |
|
648 |
+ handler() { |
|
649 |
+ this.$nextTick(() => { |
|
650 |
+ this.updateHeight(); |
|
651 |
+ }); |
|
652 |
+ }, |
|
653 |
+ deep: true, |
|
654 |
+ }, |
|
655 |
+ bbsCn: { |
|
656 |
+ handler() { |
|
657 |
+ this.$nextTick(() => { |
|
658 |
+ this.updateHeight(); |
|
659 |
+ }); |
|
660 |
+ }, |
|
661 |
+ deep: true, |
|
662 |
+ }, |
|
704 | 663 |
}, |
705 | 664 |
computed: {}, |
706 | 665 |
components: { |
707 | 666 |
ckeditorComponent, |
708 | 667 |
}, |
709 |
- mounted() {}, |
|
668 |
+ mounted() { |
|
669 |
+ this.updateHeight(); |
|
670 |
+ |
|
671 |
+ // 창 크기 변경 시에도 대응하고 싶다면: |
|
672 |
+ window.addEventListener('resize', this.updateHeight); |
|
673 |
+ }, |
|
674 |
+ beforeUnmount() { |
|
675 |
+ window.removeEventListener('resize', this.updateHeight); |
|
676 |
+ }, |
|
710 | 677 |
}; |
711 | 678 |
</script> |
--- client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectListOne.vue
+++ client/views/pages/adm/boardManagement/template/galleryTemplate/GallerySelectListOne.vue
... | ... | @@ -1,61 +1,64 @@ |
1 | 1 |
<template> |
2 | 2 |
<template v-if="pageRole === 'portal'"></template> |
3 | 3 |
<template v-else> |
4 |
- <div class="content-zone"> |
|
4 |
+ <div |
|
5 |
+ class="content-zone" |
|
6 |
+ :class="bbsMng.bfrAftrPstUseYn === 'Y' ? 'detail' : 'sch-full'" |
|
7 |
+ > |
|
5 | 8 |
<div class="content"> |
6 | 9 |
<div class="scroll"> |
7 |
- <div class="form-box"> |
|
8 |
- <div class="layout between"> |
|
9 |
- <div class="form-box-title"> |
|
10 |
+ <div class="form-box h_100"> |
|
11 |
+ <div class="layout between form-box-title"> |
|
12 |
+ <div> |
|
10 | 13 |
<p>{{ bbsCn.bbsNm }}</p> |
11 | 14 |
</div> |
12 | 15 |
<span>등록일시 | {{ bbsCn.regDt }}</span> |
13 | 16 |
</div> |
14 |
- <div class="form-content"> |
|
15 |
- <div class="grid-column"> |
|
16 |
- <swiper-container |
|
17 |
- class="mySwiper mb30" |
|
18 |
- thumbs-swiper=".mySwiper2" |
|
19 |
- space-between="10" |
|
20 |
- navigation="true" |
|
21 |
- > |
|
22 |
- <swiper-slide |
|
23 |
- v-for="(item, index) in imgFileList" |
|
24 |
- :key="index" |
|
25 |
- > |
|
26 |
- <img :src="item.absltPath" /> |
|
27 |
- </swiper-slide> |
|
28 |
- </swiper-container> |
|
17 |
+ <div class="form-content grid-none " style="max-height: auto;"> |
|
18 |
+ <div> |
|
19 |
+ <div class="gallery-wrap"> |
|
20 |
+ <swiper-container |
|
21 |
+ class="mySwiper" |
|
22 |
+ thumbs-swiper=".mySwiper2" |
|
23 |
+ space-between="10" |
|
24 |
+ navigation="true" |
|
25 |
+ > |
|
26 |
+ <swiper-slide |
|
27 |
+ v-for="(item, index) in imgFileList" |
|
28 |
+ :key="index" |
|
29 |
+ > |
|
30 |
+ <img :src="item.absltPath" /> |
|
31 |
+ </swiper-slide> |
|
32 |
+ </swiper-container> |
|
29 | 33 |
|
30 |
- <swiper-container |
|
31 |
- class="mySwiper2" |
|
32 |
- space-between="10" |
|
33 |
- slides-per-view="4" |
|
34 |
- free-mode="true" |
|
35 |
- watch-slides-progress="true" |
|
36 |
- > |
|
37 |
- <swiper-slide |
|
38 |
- v-for="(item, index) in imgFileList" |
|
39 |
- :key="index" |
|
40 |
- > |
|
41 |
- <img :src="item.absltPath" class="radius" /> |
|
42 |
- </swiper-slide> |
|
43 |
- </swiper-container> |
|
44 |
- <div> |
|
34 |
+ <swiper-container |
|
35 |
+ class="mySwiper2" |
|
36 |
+ space-between="10" |
|
37 |
+ slides-per-view="4" |
|
38 |
+ free-mode="true" |
|
39 |
+ watch-slides-progress="true" |
|
40 |
+ > |
|
41 |
+ <swiper-slide |
|
42 |
+ v-for="(item, index) in imgFileList" |
|
43 |
+ :key="index" |
|
44 |
+ > |
|
45 |
+ <img :src="item.absltPath" class="radius" /> |
|
46 |
+ </swiper-slide> |
|
47 |
+ </swiper-container> |
|
48 |
+ </div> |
|
45 | 49 |
<div |
46 | 50 |
class="editor5" |
47 |
- style="width: 100%; min-height: 35rem" |
|
51 |
+ style="width: 100%;" |
|
48 | 52 |
v-html="sanitizedContent" |
49 | 53 |
> |
50 | 54 |
</div> |
51 |
- </div> |
|
52 | 55 |
</div> |
53 |
- <div class="grid-column"> |
|
54 |
- <p>첨부파일</p> |
|
56 |
+ <div class="layout border-bottom"> |
|
57 |
+ <p class="form-title">첨부파일</p> |
|
55 | 58 |
<div v-if="fileList.length == 0"> |
56 | 59 |
<label>첨부된 파일이 없습니다.</label> |
57 | 60 |
</div> |
58 |
- <ul v-else class="pd10"> |
|
61 |
+ <ul v-else> |
|
59 | 62 |
<li |
60 | 63 |
v-for="(item, idx) in fileList" |
61 | 64 |
:key="idx" |
... | ... | @@ -67,109 +70,86 @@ |
67 | 70 |
</li> |
68 | 71 |
</ul> |
69 | 72 |
</div> |
70 |
- </div> |
|
71 |
- </div> |
|
72 |
- <div |
|
73 |
- v-if="bbsMng.cmntUseYn == 'Y'" |
|
74 |
- :class="{ |
|
75 |
- pd30: true, |
|
76 |
- 'comment-zone': pageRole == 'adm', |
|
77 |
- 'comment-zone2': pageRole == 'portal', |
|
78 |
- }" |
|
79 |
- > |
|
80 |
- <div class="flex justify-start align-start mb30"> |
|
81 |
- <div class="gd-10 pl0"> |
|
82 |
- <textarea |
|
83 |
- name="" |
|
84 |
- id="" |
|
85 |
- style="width: 100%; min-height: 4rem" |
|
86 |
- v-model="InputCmnt" |
|
87 |
- ></textarea> |
|
73 |
+ <!-- 댓글 --> |
|
74 |
+ <div v-if="bbsMng.cmntUseYn == 'Y'" class="comment-box"> |
|
75 |
+ <div class="layout w_100 mb30"> |
|
76 |
+ <p class="comment-head">댓글</p> |
|
77 |
+ <textarea |
|
78 |
+ class="form-control sm border-none" |
|
79 |
+ placeholder="댓글을 입력하세요." |
|
80 |
+ v-model="InputCmnt" |
|
81 |
+ ></textarea> |
|
82 |
+ <button class="btn sm primary" @click="fnInsertCmnt"> |
|
83 |
+ 등록 |
|
84 |
+ </button> |
|
85 |
+ </div> |
|
86 |
+ <div class="comment-wrap"> |
|
87 |
+ <template v-if="cmntList.length > 0"> |
|
88 |
+ <CommentItem |
|
89 |
+ :comments="cmntList" |
|
90 |
+ :pageAuth="pageAuth" |
|
91 |
+ :pageId="pageId" |
|
92 |
+ @isReply="isReply" |
|
93 |
+ /> |
|
94 |
+ </template> |
|
95 |
+ <template v-else> |
|
96 |
+ <p class="comment-text text-ct data-none"> |
|
97 |
+ 등록된 댓글이 없습니다. |
|
98 |
+ </p> |
|
99 |
+ </template> |
|
100 |
+ </div> |
|
88 | 101 |
</div> |
89 |
- <div class="gd-2 pr0"> |
|
90 |
- <button |
|
91 |
- :class="{ |
|
92 |
- 'large-btn comment-btn radius': true, |
|
93 |
- 'blue-btn': pageRole == 'adm', |
|
94 |
- 'green-btn': pageRole == 'portal', |
|
95 |
- }" |
|
96 |
- @click="fnInsertCmnt" |
|
97 |
- > |
|
98 |
- 등록 |
|
99 |
- </button> |
|
100 |
- </div> |
|
101 |
- </div> |
|
102 |
- <div class="comment-wrap"> |
|
103 |
- <template v-if="cmntList.length > 0"> |
|
104 |
- <CommentItem |
|
105 |
- :comments="cmntList" |
|
106 |
- :pageAuth="pageAuth" |
|
107 |
- :pageId="pageId" |
|
108 |
- @isReply="isReply" |
|
109 |
- /> |
|
110 |
- </template> |
|
111 |
- <template v-else> |
|
112 |
- <p class="comment-text text-ct data-none"> |
|
113 |
- 등록된 댓글이 없습니다. |
|
114 |
- </p> |
|
115 |
- </template> |
|
116 | 102 |
</div> |
117 | 103 |
</div> |
118 | 104 |
</div> |
119 | 105 |
</div> |
120 | 106 |
</div> |
121 | 107 |
<!-- 다음글 이전글 --> |
122 |
- <div> |
|
123 |
- <table v-if="bbsMng.bfrAftrPstUseYn == 'Y'" class="content-navigate mb30"> |
|
108 |
+ <div class="navigate-wrap" v-if="bbsMng.bfrAftrPstUseYn == 'Y'"> |
|
109 |
+ <table class="content-navigate"> |
|
124 | 110 |
<colgroup> |
125 | 111 |
<col width="10%" /> |
126 | 112 |
<col width="90%" /> |
127 | 113 |
</colgroup> |
128 | 114 |
<tbody> |
129 | 115 |
<tr> |
130 |
- <td class="pd10 text-ct">이전글</td> |
|
116 |
+ <td>이전글</td> |
|
131 | 117 |
<td |
132 | 118 |
v-if="prevBbsCn != null" |
133 |
- class="pd10 cursor" |
|
119 |
+ class="cursor" |
|
134 | 120 |
@click="fnMoveBbsCn(prevBbsCn.bbsId)" |
135 | 121 |
> |
136 | 122 |
{{ prevBbsCn.bbsNm }} |
137 | 123 |
</td> |
138 |
- <td v-else class="pd10">이전글이 없습니다</td> |
|
124 |
+ <td v-else>이전글이 없습니다</td> |
|
139 | 125 |
</tr> |
140 | 126 |
<tr> |
141 |
- <td class="pd10 text-ct">다음글</td> |
|
127 |
+ <td>다음글</td> |
|
142 | 128 |
<td |
143 | 129 |
v-if="nextBbsCn != null" |
144 |
- class="pd10 cursor" |
|
130 |
+ class=" cursor" |
|
145 | 131 |
@click="fnMoveBbsCn(nextBbsCn.bbsId)" |
146 | 132 |
> |
147 | 133 |
{{ nextBbsCn.bbsNm }} |
148 | 134 |
</td> |
149 |
- <td v-else class="pd10">다음글이 없습니다</td> |
|
135 |
+ <td v-else>다음글이 없습니다</td> |
|
150 | 136 |
</tr> |
151 | 137 |
</tbody> |
152 | 138 |
</table> |
153 | 139 |
</div> |
154 | 140 |
<div class="btn-wrap"> |
155 |
- <button class="btn sm" @click="fnList"> |
|
141 |
+ <button class="btn sm tertiary" @click="fnList"> |
|
156 | 142 |
목록 |
157 | 143 |
</button> |
158 | 144 |
<template v-if="pageAuth.mdfcnAuthrt == 'Y' || mbrId == bbsCn.rgtr"> |
159 |
- <button |
|
160 |
- :class="{ |
|
161 |
- 'large-btn': true, |
|
162 |
- 'blue-border-btn': pageRole == 'adm', |
|
163 |
- 'green-border-btn': |
|
164 |
- pageRole == 'portal', |
|
165 |
- }" |
|
145 |
+ <button class="btn sm main" |
|
166 | 146 |
@click="fnUpdate" |
167 | 147 |
> |
168 | 148 |
수정 |
169 | 149 |
</button> |
170 | 150 |
</template> |
171 | 151 |
<template v-if="pageAuth.delAuthrt == 'Y' || mbrId == bbsCn.rgtr"> |
172 |
- <button class="large-btn red-border-btn" @click="fnDelete"> |
|
152 |
+ <button class="btn sm red" @click="fnDelete"> |
|
173 | 153 |
삭제 |
174 | 154 |
</button> |
175 | 155 |
</template> |
... | ... | @@ -430,7 +410,7 @@ |
430 | 410 |
}; |
431 | 411 |
</script> |
432 | 412 |
|
433 |
-<style scoped> |
|
413 |
+<!-- <style scoped> |
|
434 | 414 |
swiper-container { |
435 | 415 |
width: 100%; |
436 | 416 |
height: 100%; |
... | ... | @@ -493,4 +473,4 @@ |
493 | 473 |
height: 100%; |
494 | 474 |
object-fit: cover; |
495 | 475 |
} |
496 |
-</style> |
|
476 |
+</style> --> |
--- client/views/pages/adm/boardManagement/template/videoTemplate/VideoInsert.vue
+++ client/views/pages/adm/boardManagement/template/videoTemplate/VideoInsert.vue
... | ... | @@ -1,168 +1,99 @@ |
1 | 1 |
<template> |
2 |
- <div |
|
3 |
- :class="{ |
|
4 |
- content: true, |
|
5 |
- 'admin-style overflow-y': pageRole === 'adm', |
|
6 |
- 'w1400 pt50 pb50': pageRole === 'portal', |
|
7 |
- }" |
|
8 |
- > |
|
9 |
- <div |
|
10 |
- :class="{ |
|
11 |
- 'admin-page-title point-font2 mb30': pageRole == 'adm', |
|
12 |
- 'page-title point-font mb30': pageRole == 'portal', |
|
13 |
- }" |
|
14 |
- > |
|
15 |
- <p>{{ bbsMng.bbsNm }}</p> |
|
16 |
- </div> |
|
17 |
- <table class="form-table mb30"> |
|
18 |
- <colgroup> |
|
19 |
- <col width="10%" /> |
|
20 |
- <col width="90%" /> |
|
21 |
- </colgroup> |
|
22 |
- <tbody> |
|
23 |
- <tr> |
|
24 |
- <th |
|
25 |
- :class="{ |
|
26 |
- 'text-lf': true, |
|
27 |
- 'point-font2': pageRole == 'adm', |
|
28 |
- 'point-font': pageRole == 'portal', |
|
29 |
- }" |
|
30 |
- > |
|
31 |
- <span>제목</span> |
|
32 |
- </th> |
|
33 |
- <td> |
|
34 |
- <input |
|
35 |
- type="text" |
|
36 |
- class="full-input" |
|
37 |
- placeholder="제목을 입력하세요." |
|
38 |
- v-model="bbsCn.bbsNm" |
|
39 |
- /> |
|
40 |
- </td> |
|
41 |
- </tr> |
|
42 |
- <tr class="border-top"> |
|
43 |
- <th |
|
44 |
- colspan="4" |
|
45 |
- :class="{ |
|
46 |
- 'text-lf': true, |
|
47 |
- 'point-font2': pageRole == 'adm', |
|
48 |
- 'point-font': pageRole == 'portal', |
|
49 |
- }" |
|
50 |
- > |
|
51 |
- <span>내용</span> |
|
52 |
- </th> |
|
53 |
- </tr> |
|
54 |
- <tr> |
|
55 |
- <td colspan="4"> |
|
56 |
- <!-- <textarea name="smart" id="smart" style="width:100%"></textarea>--> |
|
57 |
- <ckeditorComponent |
|
58 |
- ref="ckeditor5" |
|
59 |
- :bbsCn.sync="bbsCn" |
|
60 |
- ></ckeditorComponent> |
|
61 |
- </td> |
|
62 |
- </tr> |
|
63 |
- <tr> |
|
64 |
- <th |
|
65 |
- :class="{ |
|
66 |
- 'text-lf': true, |
|
67 |
- 'point-font2': pageRole == 'adm', |
|
68 |
- 'point-font': pageRole == 'portal', |
|
69 |
- }" |
|
70 |
- > |
|
71 |
- <span>영상 URL</span> |
|
72 |
- </th> |
|
73 |
- <td colspan="4"> |
|
74 |
- <div class="gd-6"> |
|
2 |
+ <div class="content-zone sch-full"> |
|
3 |
+ <div class="content"> |
|
4 |
+ <div class="scroll"> |
|
5 |
+ <div class="form-box h_100"> |
|
6 |
+ <div class="form-box-title"> |
|
7 |
+ <p>기본정보</p> |
|
8 |
+ <p><span>*</span>필수입력</p> |
|
9 |
+ </div> |
|
10 |
+ <div class="form-content grid-none"> |
|
11 |
+ <div class="layout"> |
|
12 |
+ <label for="" class="form-title">제목</label> |
|
75 | 13 |
<input |
76 | 14 |
type="text" |
77 |
- class="full-input" |
|
78 |
- placeholder="youtube URL을 입력해주세요." |
|
79 |
- v-model="bbsCn.vdoUrl" |
|
15 |
+ class="form-control sm" |
|
16 |
+ v-model="bbsCn.bbsNm" |
|
17 |
+ placeholder="제목을 입력하세요." |
|
80 | 18 |
/> |
81 | 19 |
</div> |
82 |
- </td> |
|
83 |
- </tr> |
|
84 |
- <tr> |
|
85 |
- <th |
|
86 |
- :class="{ |
|
87 |
- 'text-lf': true, |
|
88 |
- 'point-font2': pageRole == 'adm', |
|
89 |
- 'point-font': pageRole == 'portal', |
|
90 |
- }" |
|
91 |
- > |
|
92 |
- 썸네일 |
|
93 |
- </th> |
|
94 |
- <td colspan="2"> |
|
95 |
- <div class="gd-12 pr0"> |
|
96 |
- <div class="gd-2 pl0 pr0"> |
|
97 |
- <label |
|
98 |
- for="thumbnail" |
|
99 |
- :class="{ |
|
100 |
- 'large-btn text-ct': true, |
|
101 |
- 'blue-border-btn': pageRole == 'adm', |
|
102 |
- 'green-border-btn': |
|
103 |
- pageRole == 'portal', |
|
104 |
- }" |
|
105 |
- > |
|
106 |
- 파일찾기 |
|
107 |
- </label> |
|
108 |
- <input |
|
109 |
- type="file" |
|
110 |
- id="thumbnail" |
|
111 |
- ref="thumbnail" |
|
112 |
- @change="fnThumbnailInsert" |
|
113 |
- accept="image/*" |
|
114 |
- /> |
|
115 |
- </div> |
|
116 |
- <div class="gd-12 pl0" v-if="imgFileList.length > 0"> |
|
117 |
- <ul> |
|
118 |
- <li |
|
119 |
- v-for="(file, index) in imgFileList" |
|
120 |
- :key="index" |
|
121 |
- class="pd10 mt10 border radius" |
|
122 |
- > |
|
123 |
- <div |
|
124 |
- v-if="file['fileId'] != null" |
|
125 |
- class="flex align-center justify-between file-wrap" |
|
126 |
- > |
|
127 |
- <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
128 |
- <button |
|
129 |
- class="del-btn" |
|
130 |
- @click="fnImgFileDelete(file, index)" |
|
131 |
- > |
|
132 |
- X |
|
133 |
- </button> |
|
134 |
- </div> |
|
135 |
- <div |
|
136 |
- v-else |
|
137 |
- class="flex align-center justify-between file-wrap" |
|
138 |
- > |
|
139 |
- <p>{{ file.name }}</p> |
|
140 |
- <button |
|
141 |
- class="del-btn" |
|
142 |
- @click="fnImgFileDelete(file, index)" |
|
143 |
- > |
|
144 |
- X |
|
145 |
- </button> |
|
146 |
- </div> |
|
147 |
- </li> |
|
148 |
- </ul> |
|
20 |
+ <div class="layout" ref="first"> |
|
21 |
+ <label for="" class="form-title">내용</label> |
|
22 |
+ <div class="w_100 h_100"> |
|
23 |
+ <ckeditorComponent ref="ckeditor5" :bbsCn.sync="bbsCn"></ckeditorComponent> |
|
149 | 24 |
</div> |
150 | 25 |
</div> |
151 |
- </td> |
|
152 |
- </tr> |
|
153 |
- <tr v-if="bbsMng.atchFileUseYn === 'Y'" class="border-top"> |
|
154 |
- <th |
|
155 |
- :class="{ |
|
156 |
- 'text-lf': true, |
|
157 |
- 'point-font2': pageRole == 'adm', |
|
158 |
- 'point-font': pageRole == 'portal', |
|
159 |
- }" |
|
160 |
- > |
|
161 |
- 첨부파일 |
|
162 |
- </th> |
|
163 |
- <td colspan="2"> |
|
164 |
- <div class="gd-12 pr0"> |
|
165 |
- <div class="gd-2 pl0 pr0"> |
|
26 |
+ <div class="layout"> |
|
27 |
+ <label for="" class="form-title">영상 URL</label> |
|
28 |
+ <input |
|
29 |
+ type="text" |
|
30 |
+ class="form-control sm" |
|
31 |
+ v-model="bbsCn.vdoUrl" |
|
32 |
+ placeholder="youtube URL을 입력하세요." |
|
33 |
+ /> |
|
34 |
+ </div> |
|
35 |
+ <div class="layout"> |
|
36 |
+ <label for="" class="form-title">썸네일</label> |
|
37 |
+ <div> |
|
38 |
+ <div class="gd-2 pl0 pr0"> |
|
39 |
+ <label |
|
40 |
+ for="thumbnail" |
|
41 |
+ :class="{ |
|
42 |
+ 'large-btn text-ct': true, |
|
43 |
+ 'blue-border-btn': pageRole == 'adm', |
|
44 |
+ 'green-border-btn': |
|
45 |
+ pageRole == 'portal', |
|
46 |
+ }" |
|
47 |
+ > |
|
48 |
+ 파일찾기 |
|
49 |
+ </label> |
|
50 |
+ <input |
|
51 |
+ type="file" |
|
52 |
+ id="thumbnail" |
|
53 |
+ ref="thumbnail" |
|
54 |
+ @change="fnThumbnailInsert" |
|
55 |
+ accept="image/*" |
|
56 |
+ /> |
|
57 |
+ </div> |
|
58 |
+ <div class="gd-12 pl0" v-if="imgFileList.length > 0"> |
|
59 |
+ <ul> |
|
60 |
+ <li |
|
61 |
+ v-for="(file, index) in imgFileList" |
|
62 |
+ :key="index" |
|
63 |
+ class="pd10 mt10 border radius" |
|
64 |
+ > |
|
65 |
+ <div |
|
66 |
+ v-if="file['fileId'] != null" |
|
67 |
+ class="flex align-center justify-between file-wrap" |
|
68 |
+ > |
|
69 |
+ <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
70 |
+ <button |
|
71 |
+ class="del-btn" |
|
72 |
+ @click="fnImgFileDelete(file, index)" |
|
73 |
+ > |
|
74 |
+ X |
|
75 |
+ </button> |
|
76 |
+ </div> |
|
77 |
+ <div |
|
78 |
+ v-else |
|
79 |
+ class="flex align-center justify-between file-wrap" |
|
80 |
+ > |
|
81 |
+ <p>{{ file.name }}</p> |
|
82 |
+ <button |
|
83 |
+ class="del-btn" |
|
84 |
+ @click="fnImgFileDelete(file, index)" |
|
85 |
+ > |
|
86 |
+ X |
|
87 |
+ </button> |
|
88 |
+ </div> |
|
89 |
+ </li> |
|
90 |
+ </ul> |
|
91 |
+ </div> |
|
92 |
+ </div> |
|
93 |
+ </div> |
|
94 |
+ <div class="layout" ref="two" v-if="bbsMng.atchFileUseYn === 'Y'" > |
|
95 |
+ <label for="" class="form-title">첨부파일</label> |
|
96 |
+ <div> |
|
166 | 97 |
<label |
167 | 98 |
for="file" |
168 | 99 |
:class="{ |
... | ... | @@ -180,164 +111,445 @@ |
180 | 111 |
ref="file" |
181 | 112 |
@change="fnFileInsert" |
182 | 113 |
multiple |
183 |
- /> |
|
184 |
- </div> |
|
185 |
- <div class="gd-12 pl0" v-if="fileList.length > 0"> |
|
186 |
- <ul> |
|
187 |
- <li |
|
188 |
- v-for="(file, idx) in fileList" |
|
189 |
- :key="idx" |
|
190 |
- class="pd10 mt10 border radius" |
|
191 |
- > |
|
192 |
- <div |
|
193 |
- v-if="file['fileId'] != null" |
|
194 |
- class="flex align-center justify-between file-wrap file-wrap" |
|
114 |
+ /> |
|
115 |
+ <ul v-if="fileList.length > 0"> |
|
116 |
+ <li |
|
117 |
+ v-for="(file, idx) in fileList" |
|
118 |
+ :key="idx" |
|
119 |
+ class="pd10 mt10 border radius" |
|
195 | 120 |
> |
196 |
- <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
197 |
- <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
198 |
- X |
|
199 |
- </button> |
|
200 |
- </div> |
|
201 |
- <div |
|
202 |
- v-else |
|
203 |
- class="flex align-center justify-between file-wrap file-wrap" |
|
204 |
- > |
|
205 |
- <p>{{ file.name }}</p> |
|
206 |
- <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
207 |
- X |
|
208 |
- </button> |
|
209 |
- </div> |
|
210 |
- </li> |
|
121 |
+ <div |
|
122 |
+ v-if="file['fileId'] != null" |
|
123 |
+ class="flex align-center justify-between file-wrap" |
|
124 |
+ > |
|
125 |
+ <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
126 |
+ <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
127 |
+ X |
|
128 |
+ </button> |
|
129 |
+ </div> |
|
130 |
+ <div |
|
131 |
+ v-else |
|
132 |
+ class="flex align-center justify-between file-wrap" |
|
133 |
+ > |
|
134 |
+ <p>{{ file.name }}</p> |
|
135 |
+ <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
136 |
+ X |
|
137 |
+ </button> |
|
138 |
+ </div> |
|
139 |
+ </li> |
|
211 | 140 |
</ul> |
212 | 141 |
</div> |
213 | 142 |
</div> |
214 |
- </td> |
|
215 |
- </tr> |
|
216 |
- <tr v-if="bbsMng.ntcUseYn === 'Y'" class="border-top"> |
|
217 |
- <th |
|
218 |
- :class="{ |
|
219 |
- 'text-lf': true, |
|
220 |
- 'point-font2': pageRole == 'adm', |
|
221 |
- 'point-font': pageRole == 'portal', |
|
222 |
- }" |
|
223 |
- > |
|
224 |
- 공지글 |
|
225 |
- </th> |
|
226 |
- <td colspan="3"> |
|
227 |
- <div class="flex align-center no-gutters"> |
|
228 |
- <div class="gd-4"> |
|
229 |
- <input |
|
230 |
- type="radio" |
|
231 |
- name="notice" |
|
232 |
- id="y" |
|
233 |
- class="mr5" |
|
234 |
- value="Y" |
|
235 |
- v-model="bbsCn.ntcPstYn" |
|
236 |
- /> |
|
237 |
- <label for="y">사용</label> |
|
238 |
- </div> |
|
239 |
- <div class="gd-4"> |
|
240 |
- <input |
|
241 |
- type="radio" |
|
242 |
- name="notice" |
|
243 |
- id="n" |
|
244 |
- class="mr5" |
|
245 |
- value="N" |
|
246 |
- v-model="bbsCn.ntcPstYn" |
|
247 |
- /> |
|
248 |
- <label for="n">미사용</label> |
|
143 |
+ <div class="layout" ref="three" v-if="bbsMng.ntcUseYn === 'Y'"> |
|
144 |
+ <label for="" class="form-title">공지글</label> |
|
145 |
+ <div class="check-area"> |
|
146 |
+ <div class="form-check"> |
|
147 |
+ <input |
|
148 |
+ type="radio" |
|
149 |
+ name="notice" |
|
150 |
+ id="y" |
|
151 |
+ class="mr5" |
|
152 |
+ value="Y" |
|
153 |
+ v-model="bbsCn.ntcPstYn" |
|
154 |
+ /> |
|
155 |
+ <label for="y">사용</label> |
|
156 |
+ </div> |
|
157 |
+ <div class="form-check"> |
|
158 |
+ <input |
|
159 |
+ type="radio" |
|
160 |
+ name="notice" |
|
161 |
+ id="n" |
|
162 |
+ class="mr5" |
|
163 |
+ value="N" |
|
164 |
+ v-model="bbsCn.ntcPstYn" |
|
165 |
+ /> |
|
166 |
+ <label for="n">미사용</label> |
|
167 |
+ </div> |
|
249 | 168 |
</div> |
250 | 169 |
</div> |
251 |
- </td> |
|
252 |
- </tr> |
|
253 |
- <tr v-if="bbsCn.ntcPstYn === 'Y'" class="border-top"> |
|
254 |
- <th |
|
255 |
- :class="{ |
|
256 |
- 'text-lf': true, |
|
257 |
- 'point-font2': pageRole == 'adm', |
|
258 |
- 'point-font': pageRole == 'portal', |
|
259 |
- }" |
|
260 |
- > |
|
261 |
- 공지글 게시기간 |
|
262 |
- </th> |
|
263 |
- <td colspan="3"> |
|
264 |
- <div class="flex align-center no-gutters"> |
|
265 |
- <div class="gd-4"> |
|
266 |
- <input |
|
267 |
- type="datetime-local" |
|
268 |
- class="full-input ml0" |
|
269 |
- v-model="bbsCn.ntcBgngDt" |
|
270 |
- @change="checkDateValidity('ntcBgngDt', $event)" |
|
271 |
- /> |
|
272 |
- </div> |
|
273 |
- <div class="pd10">-</div> |
|
274 |
- <div class="gd-4"> |
|
275 |
- <input |
|
276 |
- type="datetime-local" |
|
277 |
- class="full-input ml0" |
|
278 |
- v-model="bbsCn.ntcEndDt" |
|
279 |
- @change="checkDateValidity('ntcEndDt', $event)" |
|
280 |
- /> |
|
170 |
+ <div class="layout" ref="four" v-if="bbsCn.ntcPstYn === 'Y'"> |
|
171 |
+ <label for="" class="form-title" >공지글 게시기간</label> |
|
172 |
+ <div class="flex align-center no-gutters"> |
|
173 |
+ <div class="form-control sm cal"> |
|
174 |
+ <VueDatePicker |
|
175 |
+ InlineOptions |
|
176 |
+ placeholder="시작일" |
|
177 |
+ locale="ko" |
|
178 |
+ :enable-time-picker="false" |
|
179 |
+ :format="formatDate" |
|
180 |
+ v-model="bbsCn.ntcBgngDt" |
|
181 |
+ @update:model-value="checkDateValidity('ntcBgngDt',$event)" |
|
182 |
+ /> |
|
183 |
+ <!-- <input |
|
184 |
+ type="datetime-local" |
|
185 |
+ class="full-input ml0" |
|
186 |
+ v-model="bbsCn.ntcBgngDt" |
|
187 |
+ @change="checkDateValidity('ntcBgngDt', $event)" |
|
188 |
+ /> --> |
|
189 |
+ </div> |
|
190 |
+ <div class="mark">-</div> |
|
191 |
+ <div class="form-control sm cal"> |
|
192 |
+ <VueDatePicker |
|
193 |
+ InlineOptions |
|
194 |
+ placeholder="종료일" |
|
195 |
+ locale="ko" |
|
196 |
+ :enable-time-picker="false" |
|
197 |
+ :format="formatDate" |
|
198 |
+ v-model="bbsCn.ntcEndDt" |
|
199 |
+ @update:model-value="checkDateValidity('ntcEndDt',$event)" |
|
200 |
+ /> |
|
201 |
+ <!-- <input |
|
202 |
+ type="datetime-local" |
|
203 |
+ class="full-input ml0" |
|
204 |
+ v-model="bbsCn.ntcEndDt" |
|
205 |
+ @change="checkDateValidity('ntcEndDt', $event)" |
|
206 |
+ /> --> |
|
207 |
+ </div> |
|
281 | 208 |
</div> |
282 | 209 |
</div> |
283 |
- </td> |
|
284 |
- </tr> |
|
285 |
- <tr v-if="bbsMng.prvtPstUseYn === 'Y'" class="border-top"> |
|
286 |
- <th |
|
287 |
- :class="{ |
|
288 |
- 'text-lf': true, |
|
289 |
- 'point-font2': pageRole == 'adm', |
|
290 |
- 'point-font': pageRole == 'portal', |
|
291 |
- }" |
|
292 |
- > |
|
293 |
- 비밀글 |
|
294 |
- </th> |
|
295 |
- <td colspan="3"> |
|
296 |
- <div class="flex align-center no-gutters"> |
|
297 |
- <div class="gd-4"> |
|
298 |
- <input |
|
299 |
- type="radio" |
|
300 |
- name="secret" |
|
301 |
- id="y" |
|
302 |
- class="mr5" |
|
303 |
- value="Y" |
|
304 |
- v-model="bbsCn.prvtPstYn" |
|
305 |
- /> |
|
306 |
- <label for="y">사용</label> |
|
307 |
- </div> |
|
308 |
- <div class="gd-4"> |
|
309 |
- <input |
|
310 |
- type="radio" |
|
311 |
- name="secret" |
|
312 |
- id="n" |
|
313 |
- class="mr5" |
|
314 |
- value="N" |
|
315 |
- v-model="bbsCn.prvtPstYn" |
|
316 |
- /> |
|
317 |
- <label for="n">미사용</label> |
|
210 |
+ <div class="layout" ref="five" v-if="bbsMng.prvtPstUseYn === 'Y'"> |
|
211 |
+ <label for="" class="form-title">비밀글</label> |
|
212 |
+ <div class="check-area"> |
|
213 |
+ <div class="form-check"> |
|
214 |
+ <input |
|
215 |
+ type="radio" |
|
216 |
+ name="secret" |
|
217 |
+ id="y" |
|
218 |
+ class="mr5" |
|
219 |
+ value="Y" |
|
220 |
+ v-model="bbsCn.prvtPstYn" |
|
221 |
+ /> |
|
222 |
+ <label for="y">사용</label> |
|
223 |
+ </div> |
|
224 |
+ <div class="form-check"> |
|
225 |
+ <input |
|
226 |
+ type="radio" |
|
227 |
+ name="secret" |
|
228 |
+ id="n" |
|
229 |
+ class="mr5" |
|
230 |
+ value="N" |
|
231 |
+ v-model="bbsCn.prvtPstYn" |
|
232 |
+ /> |
|
233 |
+ <label for="n">미사용</label> |
|
234 |
+ </div> |
|
318 | 235 |
</div> |
319 | 236 |
</div> |
320 |
- </td> |
|
321 |
- </tr> |
|
322 |
- </tbody> |
|
323 |
- </table> |
|
324 |
- <div class="flex justify-end align-center no-gutters"> |
|
325 |
- <div class="gd-1 mr10"> |
|
326 |
- <button |
|
327 |
- :class="{ |
|
328 |
- 'large-btn': true, |
|
329 |
- 'blue-btn': pageRole == 'adm', |
|
330 |
- 'green-btn': pageRole == 'portal', |
|
331 |
- }" |
|
332 |
- @click="fnInsert" |
|
333 |
- > |
|
334 |
- {{ bbsCn.bbsId == null ? "등록" : "수정" }} |
|
335 |
- </button> |
|
336 |
- </div> |
|
337 |
- <div class="gd-1"> |
|
338 |
- <button class="large-btn gray-btn" @click="fnCancel">취소</button> |
|
237 |
+ |
|
238 |
+ |
|
239 |
+ <!-- <table class="form-table mb30"> |
|
240 |
+ <colgroup> |
|
241 |
+ <col width="10%" /> |
|
242 |
+ <col width="90%" /> |
|
243 |
+ </colgroup> |
|
244 |
+ <tbody> |
|
245 |
+ <tr> |
|
246 |
+ <th |
|
247 |
+ :class="{ |
|
248 |
+ 'text-lf': true, |
|
249 |
+ 'point-font2': pageRole == 'adm', |
|
250 |
+ 'point-font': pageRole == 'portal', |
|
251 |
+ }" |
|
252 |
+ > |
|
253 |
+ <span>제목</span> |
|
254 |
+ </th> |
|
255 |
+ <td> |
|
256 |
+ <input |
|
257 |
+ type="text" |
|
258 |
+ class="full-input" |
|
259 |
+ placeholder="제목을 입력하세요." |
|
260 |
+ v-model="bbsCn.bbsNm" |
|
261 |
+ /> |
|
262 |
+ </td> |
|
263 |
+ </tr> |
|
264 |
+ <tr class="border-top"> |
|
265 |
+ <th |
|
266 |
+ colspan="4" |
|
267 |
+ :class="{ |
|
268 |
+ 'text-lf': true, |
|
269 |
+ 'point-font2': pageRole == 'adm', |
|
270 |
+ 'point-font': pageRole == 'portal', |
|
271 |
+ }" |
|
272 |
+ > |
|
273 |
+ <span>내용</span> |
|
274 |
+ </th> |
|
275 |
+ </tr> |
|
276 |
+ <tr> |
|
277 |
+ <td colspan="4"> |
|
278 |
+ <ckeditorComponent |
|
279 |
+ ref="ckeditor5" |
|
280 |
+ :bbsCn.sync="bbsCn" |
|
281 |
+ ></ckeditorComponent> |
|
282 |
+ </td> |
|
283 |
+ </tr> |
|
284 |
+ <tr> |
|
285 |
+ <th |
|
286 |
+ :class="{ |
|
287 |
+ 'text-lf': true, |
|
288 |
+ 'point-font2': pageRole == 'adm', |
|
289 |
+ 'point-font': pageRole == 'portal', |
|
290 |
+ }" |
|
291 |
+ > |
|
292 |
+ <span>영상 URL</span> |
|
293 |
+ </th> |
|
294 |
+ <td colspan="4"> |
|
295 |
+ <div class="gd-6"> |
|
296 |
+ <input |
|
297 |
+ type="text" |
|
298 |
+ class="full-input" |
|
299 |
+ placeholder="youtube URL을 입력해주세요." |
|
300 |
+ v-model="bbsCn.vdoUrl" |
|
301 |
+ /> |
|
302 |
+ </div> |
|
303 |
+ </td> |
|
304 |
+ </tr> |
|
305 |
+ <tr> |
|
306 |
+ <th |
|
307 |
+ :class="{ |
|
308 |
+ 'text-lf': true, |
|
309 |
+ 'point-font2': pageRole == 'adm', |
|
310 |
+ 'point-font': pageRole == 'portal', |
|
311 |
+ }" |
|
312 |
+ > |
|
313 |
+ 썸네일 |
|
314 |
+ </th> |
|
315 |
+ <td colspan="2"> |
|
316 |
+ <div class="gd-12 pr0"> |
|
317 |
+ <div class="gd-2 pl0 pr0"> |
|
318 |
+ <label |
|
319 |
+ for="thumbnail" |
|
320 |
+ :class="{ |
|
321 |
+ 'large-btn text-ct': true, |
|
322 |
+ 'blue-border-btn': pageRole == 'adm', |
|
323 |
+ 'green-border-btn': |
|
324 |
+ pageRole == 'portal', |
|
325 |
+ }" |
|
326 |
+ > |
|
327 |
+ 파일찾기 |
|
328 |
+ </label> |
|
329 |
+ <input |
|
330 |
+ type="file" |
|
331 |
+ id="thumbnail" |
|
332 |
+ ref="thumbnail" |
|
333 |
+ @change="fnThumbnailInsert" |
|
334 |
+ accept="image/*" |
|
335 |
+ /> |
|
336 |
+ </div> |
|
337 |
+ <div class="gd-12 pl0" v-if="imgFileList.length > 0"> |
|
338 |
+ <ul> |
|
339 |
+ <li |
|
340 |
+ v-for="(file, index) in imgFileList" |
|
341 |
+ :key="index" |
|
342 |
+ class="pd10 mt10 border radius" |
|
343 |
+ > |
|
344 |
+ <div |
|
345 |
+ v-if="file['fileId'] != null" |
|
346 |
+ class="flex align-center justify-between file-wrap" |
|
347 |
+ > |
|
348 |
+ <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
349 |
+ <button |
|
350 |
+ class="del-btn" |
|
351 |
+ @click="fnImgFileDelete(file, index)" |
|
352 |
+ > |
|
353 |
+ X |
|
354 |
+ </button> |
|
355 |
+ </div> |
|
356 |
+ <div |
|
357 |
+ v-else |
|
358 |
+ class="flex align-center justify-between file-wrap" |
|
359 |
+ > |
|
360 |
+ <p>{{ file.name }}</p> |
|
361 |
+ <button |
|
362 |
+ class="del-btn" |
|
363 |
+ @click="fnImgFileDelete(file, index)" |
|
364 |
+ > |
|
365 |
+ X |
|
366 |
+ </button> |
|
367 |
+ </div> |
|
368 |
+ </li> |
|
369 |
+ </ul> |
|
370 |
+ </div> |
|
371 |
+ </div> |
|
372 |
+ </td> |
|
373 |
+ </tr> |
|
374 |
+ <tr v-if="bbsMng.atchFileUseYn === 'Y'" class="border-top"> |
|
375 |
+ <th |
|
376 |
+ :class="{ |
|
377 |
+ 'text-lf': true, |
|
378 |
+ 'point-font2': pageRole == 'adm', |
|
379 |
+ 'point-font': pageRole == 'portal', |
|
380 |
+ }" |
|
381 |
+ > |
|
382 |
+ 첨부파일 |
|
383 |
+ </th> |
|
384 |
+ <td colspan="2"> |
|
385 |
+ <div class="gd-12 pr0"> |
|
386 |
+ <div class="gd-2 pl0 pr0"> |
|
387 |
+ <label |
|
388 |
+ for="file" |
|
389 |
+ :class="{ |
|
390 |
+ 'large-btn text-ct': true, |
|
391 |
+ 'blue-border-btn': pageRole == 'adm', |
|
392 |
+ 'green-border-btn': |
|
393 |
+ pageRole == 'portal', |
|
394 |
+ }" |
|
395 |
+ > |
|
396 |
+ 파일찾기 |
|
397 |
+ </label> |
|
398 |
+ <input |
|
399 |
+ type="file" |
|
400 |
+ id="file" |
|
401 |
+ ref="file" |
|
402 |
+ @change="fnFileInsert" |
|
403 |
+ multiple |
|
404 |
+ /> |
|
405 |
+ </div> |
|
406 |
+ <div class="gd-12 pl0" v-if="fileList.length > 0"> |
|
407 |
+ <ul> |
|
408 |
+ <li |
|
409 |
+ v-for="(file, idx) in fileList" |
|
410 |
+ :key="idx" |
|
411 |
+ class="pd10 mt10 border radius" |
|
412 |
+ > |
|
413 |
+ <div |
|
414 |
+ v-if="file['fileId'] != null" |
|
415 |
+ class="flex align-center justify-between file-wrap file-wrap" |
|
416 |
+ > |
|
417 |
+ <p>{{ file["fileNm"] }}.{{ file["extnNm"] }}</p> |
|
418 |
+ <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
419 |
+ X |
|
420 |
+ </button> |
|
421 |
+ </div> |
|
422 |
+ <div |
|
423 |
+ v-else |
|
424 |
+ class="flex align-center justify-between file-wrap file-wrap" |
|
425 |
+ > |
|
426 |
+ <p>{{ file.name }}</p> |
|
427 |
+ <button class="del-btn" @click="fnFileDelete(file, idx)"> |
|
428 |
+ X |
|
429 |
+ </button> |
|
430 |
+ </div> |
|
431 |
+ </li> |
|
432 |
+ </ul> |
|
433 |
+ </div> |
|
434 |
+ </div> |
|
435 |
+ </td> |
|
436 |
+ </tr> |
|
437 |
+ <tr v-if="bbsMng.ntcUseYn === 'Y'" class="border-top"> |
|
438 |
+ <th |
|
439 |
+ :class="{ |
|
440 |
+ 'text-lf': true, |
|
441 |
+ 'point-font2': pageRole == 'adm', |
|
442 |
+ 'point-font': pageRole == 'portal', |
|
443 |
+ }" |
|
444 |
+ > |
|
445 |
+ 공지글 |
|
446 |
+ </th> |
|
447 |
+ <td colspan="3"> |
|
448 |
+ <div class="flex align-center no-gutters"> |
|
449 |
+ <div class="gd-4"> |
|
450 |
+ <input |
|
451 |
+ type="radio" |
|
452 |
+ name="notice" |
|
453 |
+ id="y" |
|
454 |
+ class="mr5" |
|
455 |
+ value="Y" |
|
456 |
+ v-model="bbsCn.ntcPstYn" |
|
457 |
+ /> |
|
458 |
+ <label for="y">사용</label> |
|
459 |
+ </div> |
|
460 |
+ <div class="gd-4"> |
|
461 |
+ <input |
|
462 |
+ type="radio" |
|
463 |
+ name="notice" |
|
464 |
+ id="n" |
|
465 |
+ class="mr5" |
|
466 |
+ value="N" |
|
467 |
+ v-model="bbsCn.ntcPstYn" |
|
468 |
+ /> |
|
469 |
+ <label for="n">미사용</label> |
|
470 |
+ </div> |
|
471 |
+ </div> |
|
472 |
+ </td> |
|
473 |
+ </tr> |
|
474 |
+ <tr v-if="bbsCn.ntcPstYn === 'Y'" class="border-top"> |
|
475 |
+ <th |
|
476 |
+ :class="{ |
|
477 |
+ 'text-lf': true, |
|
478 |
+ 'point-font2': pageRole == 'adm', |
|
479 |
+ 'point-font': pageRole == 'portal', |
|
480 |
+ }" |
|
481 |
+ > |
|
482 |
+ 공지글 게시기간 |
|
483 |
+ </th> |
|
484 |
+ <td colspan="3"> |
|
485 |
+ <div class="flex align-center no-gutters"> |
|
486 |
+ <div class="gd-4"> |
|
487 |
+ <input |
|
488 |
+ type="datetime-local" |
|
489 |
+ class="full-input ml0" |
|
490 |
+ v-model="bbsCn.ntcBgngDt" |
|
491 |
+ @change="checkDateValidity('ntcBgngDt', $event)" |
|
492 |
+ /> |
|
493 |
+ </div> |
|
494 |
+ <div class="pd10">-</div> |
|
495 |
+ <div class="gd-4"> |
|
496 |
+ <input |
|
497 |
+ type="datetime-local" |
|
498 |
+ class="full-input ml0" |
|
499 |
+ v-model="bbsCn.ntcEndDt" |
|
500 |
+ @change="checkDateValidity('ntcEndDt', $event)" |
|
501 |
+ /> |
|
502 |
+ </div> |
|
503 |
+ </div> |
|
504 |
+ </td> |
|
505 |
+ </tr> |
|
506 |
+ <tr v-if="bbsMng.prvtPstUseYn === 'Y'" class="border-top"> |
|
507 |
+ <th |
|
508 |
+ :class="{ |
|
509 |
+ 'text-lf': true, |
|
510 |
+ 'point-font2': pageRole == 'adm', |
|
511 |
+ 'point-font': pageRole == 'portal', |
|
512 |
+ }" |
|
513 |
+ > |
|
514 |
+ 비밀글 |
|
515 |
+ </th> |
|
516 |
+ <td colspan="3"> |
|
517 |
+ <div class="flex align-center no-gutters"> |
|
518 |
+ <div class="gd-4"> |
|
519 |
+ <input |
|
520 |
+ type="radio" |
|
521 |
+ name="secret" |
|
522 |
+ id="y" |
|
523 |
+ class="mr5" |
|
524 |
+ value="Y" |
|
525 |
+ v-model="bbsCn.prvtPstYn" |
|
526 |
+ /> |
|
527 |
+ <label for="y">사용</label> |
|
528 |
+ </div> |
|
529 |
+ <div class="gd-4"> |
|
530 |
+ <input |
|
531 |
+ type="radio" |
|
532 |
+ name="secret" |
|
533 |
+ id="n" |
|
534 |
+ class="mr5" |
|
535 |
+ value="N" |
|
536 |
+ v-model="bbsCn.prvtPstYn" |
|
537 |
+ /> |
|
538 |
+ <label for="n">미사용</label> |
|
539 |
+ </div> |
|
540 |
+ </div> |
|
541 |
+ </td> |
|
542 |
+ </tr> |
|
543 |
+ </tbody> |
|
544 |
+ </table> --> |
|
545 |
+ </div> |
|
546 |
+ </div> |
|
339 | 547 |
</div> |
340 | 548 |
</div> |
549 |
+ </div> |
|
550 |
+ <div class="btn-wrap"> |
|
551 |
+ <button class="btn sm main" @click="fnInsert">{{ bbsCn.bbsId == null ? "등록" : "수정" }}</button> |
|
552 |
+ <button class="btn sm tertiary" @click="fnCancel">취소</button> |
|
341 | 553 |
</div> |
342 | 554 |
</template> |
343 | 555 |
|
... | ... | @@ -721,6 +933,32 @@ |
721 | 933 |
|
722 | 934 |
// }); |
723 | 935 |
// } |
936 |
+ // 날짜포맷 |
|
937 |
+ formatDate(date) { |
|
938 |
+ const year = date.getFullYear(); |
|
939 |
+ const month = ('00' + (date.getMonth() + 1)).slice(-2); |
|
940 |
+ const day = ('00' + date.getDate()).slice(-2); |
|
941 |
+ return `${year}-${month}-${day}`; |
|
942 |
+ }, |
|
943 |
+ updateHeight() { |
|
944 |
+ this.$nextTick(() => { |
|
945 |
+ const first = this.$refs.first; |
|
946 |
+ const two = this.$refs.two; |
|
947 |
+ const three = this.$refs.three; |
|
948 |
+ const fore = this.$refs.fore; |
|
949 |
+ const five = this.$refs.five; |
|
950 |
+ |
|
951 |
+ let total = 0; |
|
952 |
+ if (two) total += two.offsetHeight; |
|
953 |
+ if (three) total += three.offsetHeight; |
|
954 |
+ if (fore) total += fore.offsetHeight; |
|
955 |
+ if (five) total += five.offsetHeight; |
|
956 |
+ |
|
957 |
+ if (first) { |
|
958 |
+ first.style.height = `calc(100% - ${total}px - 61px - 48px - 48px)`; |
|
959 |
+ } |
|
960 |
+ }); |
|
961 |
+ }, |
|
724 | 962 |
}, |
725 | 963 |
watch: { |
726 | 964 |
youtubeUrl() { |
... | ... | @@ -736,11 +974,35 @@ |
736 | 974 |
this.bbsCn.ntcEndDt == null ? now : this.bbsCn.ntcEndDt; |
737 | 975 |
} |
738 | 976 |
}, |
977 |
+ bbsMng: { |
|
978 |
+ handler() { |
|
979 |
+ this.$nextTick(() => { |
|
980 |
+ this.updateHeight(); |
|
981 |
+ }); |
|
982 |
+ }, |
|
983 |
+ deep: true, |
|
984 |
+ }, |
|
985 |
+ bbsCn: { |
|
986 |
+ handler() { |
|
987 |
+ this.$nextTick(() => { |
|
988 |
+ this.updateHeight(); |
|
989 |
+ }); |
|
990 |
+ }, |
|
991 |
+ deep: true, |
|
992 |
+ }, |
|
739 | 993 |
}, |
740 | 994 |
computed: {}, |
741 | 995 |
components: { |
742 | 996 |
ckeditorComponent, |
743 | 997 |
}, |
744 |
- mounted() {}, |
|
998 |
+ mounted() { |
|
999 |
+ this.updateHeight(); |
|
1000 |
+ |
|
1001 |
+ // 창 크기 변경 시에도 대응하고 싶다면: |
|
1002 |
+ window.addEventListener('resize', this.updateHeight); |
|
1003 |
+ }, |
|
1004 |
+ beforeUnmount() { |
|
1005 |
+ window.removeEventListener('resize', this.updateHeight); |
|
1006 |
+ }, |
|
745 | 1007 |
}; |
746 | 1008 |
</script> |
--- client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectListOne.vue
+++ client/views/pages/adm/boardManagement/template/videoTemplate/VideoSelectListOne.vue
... | ... | @@ -1,206 +1,336 @@ |
1 | 1 |
<template> |
2 |
- <div |
|
3 |
- :class="{ |
|
4 |
- content: true, |
|
5 |
- 'admin-style overflow-y': pageRole === 'adm', |
|
6 |
- 'w1400 pt50 pb50': pageRole === 'portal', |
|
7 |
- }" |
|
8 |
- > |
|
9 |
- <div |
|
2 |
+ <template v-if="pageRole === 'portal'"> |
|
3 |
+ <div |
|
10 | 4 |
:class="{ |
11 |
- 'admin-page-title point-font2 mb30': pageRole == 'adm', |
|
12 |
- 'page-title point-font mb30': pageRole == 'portal', |
|
5 |
+ content: true, |
|
6 |
+ 'admin-style overflow-y': pageRole === 'adm', |
|
7 |
+ 'w1400 pt50 pb50': pageRole === 'portal', |
|
13 | 8 |
}" |
14 | 9 |
> |
15 |
- <p>{{ bbsMng.bbsNm }}</p> |
|
16 |
- </div> |
|
17 |
- <div> |
|
18 |
- <table |
|
19 |
- class="detail-table mb30" |
|
20 |
- :class="{ 'admin-detail': pageRole === 'adm' }" |
|
21 |
- > |
|
22 |
- <colgroup> |
|
23 |
- <col width="10%" /> |
|
24 |
- <col width="90%" /> |
|
25 |
- </colgroup> |
|
26 |
- <tbody> |
|
27 |
- <tr class="detail-title"> |
|
28 |
- <td colspan="2"> |
|
29 |
- <p |
|
30 |
- :class="{ |
|
31 |
- 'detail-table-title point-font2 mb10': pageRole == 'adm', |
|
32 |
- 'detail-table-title point-font mb10': |
|
33 |
- pageRole == 'portal', |
|
34 |
- }" |
|
35 |
- > |
|
36 |
- {{ bbsCn.bbsNm }} |
|
37 |
- </p> |
|
38 |
- <p> |
|
39 |
- <span>등록일시 | {{ bbsCn.regDt }}</span> |
|
40 |
- </p> |
|
41 |
- </td> |
|
42 |
- </tr> |
|
43 |
- <tr> |
|
44 |
- <td colspan="2" class="pd15"> |
|
45 |
- <div style="min-height: 70rem"> |
|
46 |
- <div class="video-zone"> |
|
47 |
- <div class="iframe-container"> |
|
48 |
- <iframe |
|
49 |
- :src="bbsCn.vdoUrl" |
|
50 |
- title="YouTube video player" |
|
51 |
- frameborder="0" |
|
52 |
- allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" |
|
53 |
- referrerpolicy="strict-origin-when-cross-origin" |
|
54 |
- allowfullscreen |
|
55 |
- > |
|
56 |
- </iframe> |
|
57 |
- </div> |
|
58 |
- </div> |
|
59 |
- <div |
|
60 |
- class="editor5" |
|
61 |
- style="width: 100%; min-height: 35rem" |
|
62 |
- v-html="sanitizedContent" |
|
63 |
- ></div> |
|
64 |
- </div> |
|
65 |
- </td> |
|
66 |
- </tr> |
|
67 |
- <tr class="border-top"> |
|
68 |
- <td |
|
69 |
- :class="{ |
|
70 |
- 'pd15 point-font2': pageRole == 'adm', |
|
71 |
- 'pd15 point-font': pageRole == 'portal', |
|
72 |
- }" |
|
73 |
- > |
|
74 |
- 첨부파일 |
|
75 |
- </td> |
|
76 |
- <td> |
|
77 |
- <div v-if="fileList.length == 0"> |
|
78 |
- <label>첨부된 파일이 없습니다.</label> |
|
79 |
- </div> |
|
80 |
- <ul v-else class="pd10"> |
|
81 |
- <li |
|
82 |
- v-for="(item, idx) in fileList" |
|
83 |
- :key="idx" |
|
84 |
- @click="downloadFile(item)" |
|
85 |
- class="cursor pd5 border radius mb5 flex justify-between align-center" |
|
86 |
- > |
|
87 |
- <p>{{ item.fileNm + "." + item.extnNm }}</p> |
|
88 |
- <svg-icon type="mdi" :path="downloadFilePath"></svg-icon> |
|
89 |
- </li> |
|
90 |
- </ul> |
|
91 |
- </td> |
|
92 |
- </tr> |
|
93 |
- </tbody> |
|
94 |
- </table> |
|
95 |
- <div class="flex justify-end align-center mb30"> |
|
96 |
- <div class="gd-1 pr0"> |
|
97 |
- <button class="large-btn gray-border-btn" @click="fnList"> |
|
98 |
- 목록 |
|
99 |
- </button> |
|
100 |
- </div> |
|
101 |
- <div |
|
102 |
- v-if="pageAuth.mdfcnAuthrt == 'Y' || mbrId == bbsCn.rgtr" |
|
103 |
- class="gd-1 pr0" |
|
104 |
- > |
|
105 |
- <button |
|
106 |
- :class="{ |
|
107 |
- 'large-btn': true, |
|
108 |
- 'blue-border-btn': pageRole == 'adm', |
|
109 |
- 'green-border-btn': |
|
110 |
- pageRole == 'portal', |
|
111 |
- }" |
|
112 |
- @click="fnUpdate" |
|
113 |
- > |
|
114 |
- 수정 |
|
115 |
- </button> |
|
116 |
- </div> |
|
117 |
- <div |
|
118 |
- v-if="pageAuth.delAuthrt == 'Y' || mbrId == bbsCn.rgtr" |
|
119 |
- class="gd-1 pr0" |
|
120 |
- > |
|
121 |
- <button class="large-btn red-border-btn" @click="fnDelete"> |
|
122 |
- 삭제 |
|
123 |
- </button> |
|
124 |
- </div> |
|
125 |
- </div> |
|
126 |
- <table v-if="bbsMng.bfrAftrPstUseYn == 'Y'" class="content-navigate mb30"> |
|
127 |
- <colgroup> |
|
128 |
- <col width="10%" /> |
|
129 |
- <col width="90%" /> |
|
130 |
- </colgroup> |
|
131 |
- <tbody> |
|
132 |
- <tr> |
|
133 |
- <td class="pd10 text-ct">이전글</td> |
|
134 |
- <td |
|
135 |
- v-if="prevBbsCn != null" |
|
136 |
- class="pd10 cursor" |
|
137 |
- @click="fnMoveBbsCn(prevBbsCn.bbsId)" |
|
138 |
- > |
|
139 |
- {{ prevBbsCn.bbsNm }} |
|
140 |
- </td> |
|
141 |
- <td v-else class="pd10">이전글이 없습니다</td> |
|
142 |
- </tr> |
|
143 |
- <tr> |
|
144 |
- <td class="pd10 text-ct">다음글</td> |
|
145 |
- <td |
|
146 |
- v-if="nextBbsCn != null" |
|
147 |
- class="pd10 cursor" |
|
148 |
- @click="fnMoveBbsCn(nextBbsCn.bbsId)" |
|
149 |
- > |
|
150 |
- {{ nextBbsCn.bbsNm }} |
|
151 |
- </td> |
|
152 |
- <td v-else class="pd10">다음글이 없습니다</td> |
|
153 |
- </tr> |
|
154 |
- </tbody> |
|
155 |
- </table> |
|
156 | 10 |
<div |
157 |
- v-if="bbsMng.cmntUseYn == 'Y'" |
|
158 | 11 |
:class="{ |
159 |
- pd30: true, |
|
160 |
- 'comment-zone': pageRole == 'adm', |
|
161 |
- 'comment-zone2': pageRole == 'portal', |
|
12 |
+ 'admin-page-title point-font2 mb30': pageRole == 'adm', |
|
13 |
+ 'page-title point-font mb30': pageRole == 'portal', |
|
162 | 14 |
}" |
163 | 15 |
> |
164 |
- <div class="flex justify-start align-start mb30"> |
|
165 |
- <div class="gd-10 pl0"> |
|
166 |
- <textarea |
|
167 |
- name="" |
|
168 |
- id="" |
|
169 |
- style="width: 100%; min-height: 4rem" |
|
170 |
- v-model="InputCmnt" |
|
171 |
- ></textarea> |
|
16 |
+ <p>{{ bbsMng.bbsNm }}</p> |
|
17 |
+ </div> |
|
18 |
+ <div> |
|
19 |
+ <table |
|
20 |
+ class="detail-table mb30" |
|
21 |
+ :class="{ 'admin-detail': pageRole === 'adm' }" |
|
22 |
+ > |
|
23 |
+ <colgroup> |
|
24 |
+ <col width="10%" /> |
|
25 |
+ <col width="90%" /> |
|
26 |
+ </colgroup> |
|
27 |
+ <tbody> |
|
28 |
+ <tr class="detail-title"> |
|
29 |
+ <td colspan="2"> |
|
30 |
+ <p |
|
31 |
+ :class="{ |
|
32 |
+ 'detail-table-title point-font2 mb10': pageRole == 'adm', |
|
33 |
+ 'detail-table-title point-font mb10': |
|
34 |
+ pageRole == 'portal', |
|
35 |
+ }" |
|
36 |
+ > |
|
37 |
+ {{ bbsCn.bbsNm }} |
|
38 |
+ </p> |
|
39 |
+ <p> |
|
40 |
+ <span>등록일시 | {{ bbsCn.regDt }}</span> |
|
41 |
+ </p> |
|
42 |
+ </td> |
|
43 |
+ </tr> |
|
44 |
+ <tr> |
|
45 |
+ <td colspan="2" class="pd15"> |
|
46 |
+ <div style="min-height: 70rem"> |
|
47 |
+ <div class="video-zone"> |
|
48 |
+ <div class="iframe-container"> |
|
49 |
+ <iframe |
|
50 |
+ :src="bbsCn.vdoUrl" |
|
51 |
+ title="YouTube video player" |
|
52 |
+ frameborder="0" |
|
53 |
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" |
|
54 |
+ referrerpolicy="strict-origin-when-cross-origin" |
|
55 |
+ allowfullscreen |
|
56 |
+ > |
|
57 |
+ </iframe> |
|
58 |
+ </div> |
|
59 |
+ </div> |
|
60 |
+ <div |
|
61 |
+ class="editor5" |
|
62 |
+ style="width: 100%; min-height: 35rem" |
|
63 |
+ v-html="sanitizedContent" |
|
64 |
+ ></div> |
|
65 |
+ </div> |
|
66 |
+ </td> |
|
67 |
+ </tr> |
|
68 |
+ <tr class="border-top"> |
|
69 |
+ <td |
|
70 |
+ :class="{ |
|
71 |
+ 'pd15 point-font2': pageRole == 'adm', |
|
72 |
+ 'pd15 point-font': pageRole == 'portal', |
|
73 |
+ }" |
|
74 |
+ > |
|
75 |
+ 첨부파일 |
|
76 |
+ </td> |
|
77 |
+ <td> |
|
78 |
+ <div v-if="fileList.length == 0"> |
|
79 |
+ <label>첨부된 파일이 없습니다.</label> |
|
80 |
+ </div> |
|
81 |
+ <ul v-else class="pd10"> |
|
82 |
+ <li |
|
83 |
+ v-for="(item, idx) in fileList" |
|
84 |
+ :key="idx" |
|
85 |
+ @click="downloadFile(item)" |
|
86 |
+ class="cursor pd5 border radius mb5 flex justify-between align-center" |
|
87 |
+ > |
|
88 |
+ <p>{{ item.fileNm + "." + item.extnNm }}</p> |
|
89 |
+ <svg-icon type="mdi" :path="downloadFilePath"></svg-icon> |
|
90 |
+ </li> |
|
91 |
+ </ul> |
|
92 |
+ </td> |
|
93 |
+ </tr> |
|
94 |
+ </tbody> |
|
95 |
+ </table> |
|
96 |
+ <div class="flex justify-end align-center mb30"> |
|
97 |
+ <div class="gd-1 pr0"> |
|
98 |
+ <button class="large-btn gray-border-btn" @click="fnList"> |
|
99 |
+ 목록 |
|
100 |
+ </button> |
|
172 | 101 |
</div> |
173 |
- <div class="gd-2 pr0"> |
|
102 |
+ <div |
|
103 |
+ v-if="pageAuth.mdfcnAuthrt == 'Y' || mbrId == bbsCn.rgtr" |
|
104 |
+ class="gd-1 pr0" |
|
105 |
+ > |
|
174 | 106 |
<button |
175 | 107 |
:class="{ |
176 |
- 'large-btn comment-btn radius': true, |
|
177 |
- 'blue-btn': pageRole == 'adm', |
|
178 |
- 'green-btn': pageRole == 'portal', |
|
108 |
+ 'large-btn': true, |
|
109 |
+ 'blue-border-btn': pageRole == 'adm', |
|
110 |
+ 'green-border-btn': |
|
111 |
+ pageRole == 'portal', |
|
179 | 112 |
}" |
180 |
- @click="fnInsertCmnt" |
|
113 |
+ @click="fnUpdate" |
|
181 | 114 |
> |
182 |
- 등록 |
|
115 |
+ 수정 |
|
116 |
+ </button> |
|
117 |
+ </div> |
|
118 |
+ <div |
|
119 |
+ v-if="pageAuth.delAuthrt == 'Y' || mbrId == bbsCn.rgtr" |
|
120 |
+ class="gd-1 pr0" |
|
121 |
+ > |
|
122 |
+ <button class="large-btn red-border-btn" @click="fnDelete"> |
|
123 |
+ 삭제 |
|
183 | 124 |
</button> |
184 | 125 |
</div> |
185 | 126 |
</div> |
186 |
- <div class="comment-wrap"> |
|
187 |
- <template v-if="cmntList.length > 0"> |
|
188 |
- <CommentItem |
|
189 |
- :comments="cmntList" |
|
190 |
- :pageAuth="pageAuth" |
|
191 |
- :pageId="pageId" |
|
192 |
- @isReply="isReply" |
|
193 |
- /> |
|
194 |
- </template> |
|
195 |
- <template v-else> |
|
196 |
- <p class="comment-text text-ct data-none"> |
|
197 |
- 등록된 댓글이 없습니다. |
|
198 |
- </p> |
|
199 |
- </template> |
|
127 |
+ <table v-if="bbsMng.bfrAftrPstUseYn == 'Y'" class="content-navigate mb30"> |
|
128 |
+ <colgroup> |
|
129 |
+ <col width="10%" /> |
|
130 |
+ <col width="90%" /> |
|
131 |
+ </colgroup> |
|
132 |
+ <tbody> |
|
133 |
+ <tr> |
|
134 |
+ <td class="pd10 text-ct">이전글</td> |
|
135 |
+ <td |
|
136 |
+ v-if="prevBbsCn != null" |
|
137 |
+ class="pd10 cursor" |
|
138 |
+ @click="fnMoveBbsCn(prevBbsCn.bbsId)" |
|
139 |
+ > |
|
140 |
+ {{ prevBbsCn.bbsNm }} |
|
141 |
+ </td> |
|
142 |
+ <td v-else class="pd10">이전글이 없습니다</td> |
|
143 |
+ </tr> |
|
144 |
+ <tr> |
|
145 |
+ <td class="pd10 text-ct">다음글</td> |
|
146 |
+ <td |
|
147 |
+ v-if="nextBbsCn != null" |
|
148 |
+ class="pd10 cursor" |
|
149 |
+ @click="fnMoveBbsCn(nextBbsCn.bbsId)" |
|
150 |
+ > |
|
151 |
+ {{ nextBbsCn.bbsNm }} |
|
152 |
+ </td> |
|
153 |
+ <td v-else class="pd10">다음글이 없습니다</td> |
|
154 |
+ </tr> |
|
155 |
+ </tbody> |
|
156 |
+ </table> |
|
157 |
+ <div |
|
158 |
+ v-if="bbsMng.cmntUseYn == 'Y'" |
|
159 |
+ :class="{ |
|
160 |
+ pd30: true, |
|
161 |
+ 'comment-zone': pageRole == 'adm', |
|
162 |
+ 'comment-zone2': pageRole == 'portal', |
|
163 |
+ }" |
|
164 |
+ > |
|
165 |
+ <div class="flex justify-start align-start mb30"> |
|
166 |
+ <div class="gd-10 pl0"> |
|
167 |
+ <textarea |
|
168 |
+ name="" |
|
169 |
+ id="" |
|
170 |
+ style="width: 100%; min-height: 4rem" |
|
171 |
+ v-model="InputCmnt" |
|
172 |
+ ></textarea> |
|
173 |
+ </div> |
|
174 |
+ <div class="gd-2 pr0"> |
|
175 |
+ <button |
|
176 |
+ :class="{ |
|
177 |
+ 'large-btn comment-btn radius': true, |
|
178 |
+ 'blue-btn': pageRole == 'adm', |
|
179 |
+ 'green-btn': pageRole == 'portal', |
|
180 |
+ }" |
|
181 |
+ @click="fnInsertCmnt" |
|
182 |
+ > |
|
183 |
+ 등록 |
|
184 |
+ </button> |
|
185 |
+ </div> |
|
186 |
+ </div> |
|
187 |
+ <div class="comment-wrap"> |
|
188 |
+ <template v-if="cmntList.length > 0"> |
|
189 |
+ <CommentItem |
|
190 |
+ :comments="cmntList" |
|
191 |
+ :pageAuth="pageAuth" |
|
192 |
+ :pageId="pageId" |
|
193 |
+ @isReply="isReply" |
|
194 |
+ /> |
|
195 |
+ </template> |
|
196 |
+ <template v-else> |
|
197 |
+ <p class="comment-text text-ct data-none"> |
|
198 |
+ 등록된 댓글이 없습니다. |
|
199 |
+ </p> |
|
200 |
+ </template> |
|
201 |
+ </div> |
|
200 | 202 |
</div> |
201 | 203 |
</div> |
202 | 204 |
</div> |
203 |
- </div> |
|
205 |
+ </template> |
|
206 |
+ <template v-else> |
|
207 |
+ <div class="content-zone" |
|
208 |
+ :class="bbsMng.bfrAftrPstUseYn === 'Y' ? 'detail' : 'sch-full'"> |
|
209 |
+ <div class="content"> |
|
210 |
+ <div class="scroll"> |
|
211 |
+ <div class="form-box h_100"> |
|
212 |
+ <div class="layout between form-box-title"> |
|
213 |
+ <div> |
|
214 |
+ <p>{{ bbsCn.bbsNm }}</p> |
|
215 |
+ </div> |
|
216 |
+ <span>등록일시 | {{ bbsCn.regDt }}</span> |
|
217 |
+ </div> |
|
218 |
+ <div class="form-content grid-none" :style="bbsMng.cmntUseYn == 'Y' ? 'height: fit-content;' : ''"> |
|
219 |
+ <div> |
|
220 |
+ <div class="video-zone"> |
|
221 |
+ <div class="iframe-container"> |
|
222 |
+ <iframe |
|
223 |
+ :src="bbsCn.vdoUrl" |
|
224 |
+ title="YouTube video player" |
|
225 |
+ frameborder="0" |
|
226 |
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" |
|
227 |
+ referrerpolicy="strict-origin-when-cross-origin" |
|
228 |
+ allowfullscreen |
|
229 |
+ > |
|
230 |
+ </iframe> |
|
231 |
+ </div> |
|
232 |
+ </div> |
|
233 |
+ <div |
|
234 |
+ class="editor5" |
|
235 |
+ style="width: 100%;" |
|
236 |
+ v-html="sanitizedContent" |
|
237 |
+ ></div> |
|
238 |
+ </div> |
|
239 |
+ <div class="layout border-bottom"> |
|
240 |
+ <p class="form-title">첨부파일</p> |
|
241 |
+ <div v-if="fileList.length == 0"> |
|
242 |
+ <label>첨부된 파일이 없습니다.</label> |
|
243 |
+ </div> |
|
244 |
+ <ul v-else> |
|
245 |
+ <li |
|
246 |
+ v-for="(item, idx) in fileList" |
|
247 |
+ :key="idx" |
|
248 |
+ @click="downloadFile(item)" |
|
249 |
+ class="layout" |
|
250 |
+ > |
|
251 |
+ <p>{{ item.fileNm + "." + item.extnNm }}</p> |
|
252 |
+ <svg-icon type="mdi" :path="downloadFilePath"></svg-icon> |
|
253 |
+ </li> |
|
254 |
+ </ul> |
|
255 |
+ </div> |
|
256 |
+ <!-- 댓글 --> |
|
257 |
+ <div v-if="bbsMng.cmntUseYn == 'Y'" class="comment-box"> |
|
258 |
+ <div class="layout w_100 mb30"> |
|
259 |
+ <p class="comment-head">댓글</p> |
|
260 |
+ <textarea |
|
261 |
+ class="form-control sm border-none" |
|
262 |
+ placeholder="댓글을 입력하세요." |
|
263 |
+ v-model="InputCmnt" |
|
264 |
+ ></textarea> |
|
265 |
+ <button class="btn sm primary" @click="fnInsertCmnt"> |
|
266 |
+ 등록 |
|
267 |
+ </button> |
|
268 |
+ </div> |
|
269 |
+ <div class="comment-wrap"> |
|
270 |
+ <template v-if="cmntList.length > 0"> |
|
271 |
+ <CommentItem |
|
272 |
+ :comments="cmntList" |
|
273 |
+ :pageAuth="pageAuth" |
|
274 |
+ :pageId="pageId" |
|
275 |
+ @isReply="isReply" |
|
276 |
+ /> |
|
277 |
+ </template> |
|
278 |
+ <template v-else> |
|
279 |
+ <p class="comment-text text-ct data-none"> |
|
280 |
+ 등록된 댓글이 없습니다. |
|
281 |
+ </p> |
|
282 |
+ </template> |
|
283 |
+ </div> |
|
284 |
+ </div> |
|
285 |
+ </div> |
|
286 |
+ </div> |
|
287 |
+ </div> |
|
288 |
+ </div> |
|
289 |
+ </div> |
|
290 |
+ <div class="navigate-wrap" v-if="bbsMng.bfrAftrPstUseYn == 'Y'"> |
|
291 |
+ <table class="content-navigate"> |
|
292 |
+ <colgroup> |
|
293 |
+ <col width="10%" /> |
|
294 |
+ <col width="90%" /> |
|
295 |
+ </colgroup> |
|
296 |
+ <tbody> |
|
297 |
+ <tr> |
|
298 |
+ <td>이전글</td> |
|
299 |
+ <td |
|
300 |
+ v-if="prevBbsCn != null" |
|
301 |
+ class="cursor" |
|
302 |
+ @click="fnMoveBbsCn(prevBbsCn.bbsId)" |
|
303 |
+ > |
|
304 |
+ {{ prevBbsCn.bbsNm }} |
|
305 |
+ </td> |
|
306 |
+ <td v-else>이전글이 없습니다</td> |
|
307 |
+ </tr> |
|
308 |
+ <tr> |
|
309 |
+ <td>다음글</td> |
|
310 |
+ <td |
|
311 |
+ v-if="nextBbsCn != null" |
|
312 |
+ class="cursor" |
|
313 |
+ @click="fnMoveBbsCn(nextBbsCn.bbsId)" |
|
314 |
+ > |
|
315 |
+ {{ nextBbsCn.bbsNm }} |
|
316 |
+ </td> |
|
317 |
+ <td v-else>다음글이 없습니다</td> |
|
318 |
+ </tr> |
|
319 |
+ </tbody> |
|
320 |
+ </table> |
|
321 |
+ </div> |
|
322 |
+ <div class="btn-wrap"> |
|
323 |
+ <button class="btn sm tertiary" @click="fnList">목록</button> |
|
324 |
+ <template |
|
325 |
+ v-if="pageAuth.mdfcnAuthrt == 'Y' || mbrId == bbsCn.rgtr"> |
|
326 |
+ <button class="btn sm main" @click="fnUpdate">수정</button> |
|
327 |
+ </template> |
|
328 |
+ <template v-if="pageAuth.delAuthrt == 'Y' || mbrId == bbsCn.rgtr"> |
|
329 |
+ <button class="btn sm red" @click="fnDelete">삭제</button> |
|
330 |
+ </template> |
|
331 |
+ </div> |
|
332 |
+ </template> |
|
333 |
+ |
|
204 | 334 |
</template> |
205 | 335 |
|
206 | 336 |
<script> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?