diff --git a/app/components/datatable/DataTable.vue b/app/components/datatable/DataTable.vue index e405f4e..6752f32 100644 --- a/app/components/datatable/DataTable.vue +++ b/app/components/datatable/DataTable.vue @@ -28,14 +28,14 @@ v-for="(v, i) in filters" :key="i" > -
+
{{ v.label.indexOf(">") >= 0 ? $stripHtml(v.label, 30) : v.label }}
@@ -51,7 +51,7 @@
@@ -124,6 +124,7 @@ @changepage="changePage" />
+ [v.code, v])); var perPage = Number($find(tablesetting, { code: "per-page" }, "detail")) || 20; var filters = $copy(pagedata.filters || []); var currentField; @@ -357,142 +351,56 @@ const getStyle = function (field, record) { if (field.maxwidth) val += ` max-width:${field.maxwidth}px; `; return val; }; + +const getDetail = (code) => tablesetting.find((v) => v.code === code)?.detail || ""; const getSettingStyle = function (name, field) { - if (!tablesetting || tablesetting.length === 0) { - // manual temp fix - tablesetting = [ - { - id: 4, - code: "per-page", - name: "Số dòng trong 1 trang", - detail: "20", - }, - { - id: 8, - code: "header-filter-color", - name: "Màu chữ khi áp dụng Filter", - detail: "#00cc66", - }, - { - id: 10, - code: "background", - name: "Màu nền background", - detail: "#363636", - }, - { - id: 11, - code: "table-background", - name: "Màu nền của bảng", - detail: "#ffffff", - }, - { - id: 12, - code: "table-font-color", - name: "Mầu chữ trong bảng", - detail: "hsl(0, 0%, 14%)", - }, - { - id: 13, - code: "table-font-size", - name: "Cỡ chữ trong bảng", - detail: "12", - }, - { - id: 14, - code: "header-background", - name: "Màu nền tiêu đề", - detail: "var(--bulma-primary-soft)", - }, - { - id: 15, - code: "header-font-color", - name: "Màu chữ tiêu đề", - detail: "var(--bulma-primary-40)", - }, - { - id: 16, - code: "header-font-size", - name: "Cỡ chữ tiêu đề", - detail: "12", - }, - { - id: 17, - code: "container-height", - name: "Chiều cao container", - detail: "38", - }, - { - id: 18, - code: "header-arrow", - name: "Mũi tên trỏ xuống", - detail: "no", - }, - { - id: 19, - code: "menu-width", - name: "Chiều rộng menu", - detail: "20.6", - }, - { - id: 20, - code: "menu-min-height", - name: "Chiều cao menu (nhỏ nhất)", - detail: "32", - }, - { - id: 21, - code: "menu-max-height", - name: "Chiều cao menu (lớn nhất)", - detail: "37", - }, - { - id: 22, - code: "show-menu", - name: "Hiển thị menu", - detail: "yes", - }, - { - id: 23, - code: "note", - name: "Ghi chú", - detail: "@", - }, - { - id: 24, - code: "td-border", - name: "Đường viền", - detail: "border: 1px solid #dbdbdb;", - }, - ]; + /** @type {CSSStyleDeclaration} */ + let styles; + + switch (name) { + case "container": + styles = { + minHeight: `${getDetail("container-height")}rem`, + }; + break; + case "table": + styles = { + fontSize: `${getDetail("table-font-size")}px`, + backgroundColor: getDetail("table-background"), + color: getDetail("table-font-color"), + }; + break; + case "header": + styles = { + backgroundColor: getDetail("header-background"), + borderColor: getDetail("header-border-color"), + minWidth: `${field.minwidth}px`, + maxWidth: `${field.maxwidth}px`, + }; + break; + case "menu": + const width = field?.menuwidth || getDetail("menu-width"); + styles = { + overflow: "auto", + width: `${width}rem`, + minHeight: `${getDetail("menu-min-height")}rem`, + maxHeight: `${getDetail("menu-max-height")}rem`, + }; + break; + case "dropdown": + const isFiltered = filters.find((v) => v.name === field.name); + + styles = { + fontSize: `${getDetail("header-font-size")}px`, + color: getDetail(isFiltered ? "header-filter-color" : "header-font-color"), + }; + default: + break; } - let value = ""; - if (name === "container") { - value = "min-height:" + tablesetting.find((v) => v.code === "container-height").detail + "rem; "; - } else if (name === "table") { - value += "background-color:" + tablesetting.find((v) => v.code === "table-background").detail + "; "; - value += "font-size:" + tablesetting.find((v) => v.code === "table-font-size").detail + "px;"; - value += "color:" + tablesetting.find((v) => v.code === "table-font-color").detail + "; "; - } else if (name === "header") { - value += "background-color:" + tablesetting.find((v) => v.code === "header-background").detail + "; "; - if (field.minwidth) value += " min-width: " + field.minwidth + "px; "; - if (field.maxwidth) value += " max-width: " + field.maxwidth + "px; "; - } else if (name === "menu") { - let arg = tablesetting.find((v) => v.code === "menu-width").detail; - arg = field ? (field.menuwidth ? field.menuwidth : arg) : arg; - value += "width:" + arg + "rem; "; - value += "min-height:" + tablesetting.find((v) => v.code === "menu-min-height").detail + "rem; "; - value += "max-height:" + tablesetting.find((v) => v.code === "menu-max-height").detail + "rem; "; - value += "overflow:auto; "; - } else if (name === "dropdown") { - value += "font-size:" + tablesetting.find((v) => v.code === "header-font-size").detail + "px; "; - let found = filters.find((v) => v.name === field.name); - found - ? (value += "color:" + tablesetting.find((v) => v.code === "header-filter-color").detail + "; ") - : (value += "color:" + tablesetting.find((v) => v.code === "header-font-color").detail + "; "); - } - return value; + return styles; }; + function changePage(page) { currentPage = page; updateShow(); @@ -628,8 +536,8 @@ const updateData = async function (newVal) { //change attribute fields = $copy(newVal.columns); let _fields = fields.filter((v) => v.show); - data.map((v) => { - _fields.map((x) => (v[`${x.name}color`] = getStyle(x, v))); + data.forEach((v) => { + _fields.forEach((x) => (v[`${x.name}color`] = getStyle(x, v))); }); return updateShow(); } @@ -647,7 +555,7 @@ const updateData = async function (newVal) { } else fields = $copy(pagedata.fields); if (newVal.data || newVal.fields) { let copy = $copy(newVal.data || data); - this.data = $calculateData(copy, fields); + data = $calculateData(copy, fields); let fields = fields.filter((v) => v.show); data.map((v) => { fields.map((x) => (v[`${x.name}color`] = getStyle(x, v))); @@ -678,6 +586,9 @@ const tableStyle = getSettingStyle("table"); setTimeout(() => updateShow(), 200); diff --git a/app/components/imports/Color.vue b/app/components/imports/Color.vue index 6258af2..8f51da3 100644 --- a/app/components/imports/Color.vue +++ b/app/components/imports/Color.vue @@ -6,7 +6,7 @@ const props = defineProps({