
--- 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
+++ 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>(파일 끝에 줄바꿈 문자 없음) |
|
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?