Compare commits

..

No commits in common. "492a3e816366304b6df5ef69f3f2a26f494bb2ac" and "f829df79f80af0f5d12031e099d4a757c1fc3f48" have entirely different histories.

18 changed files with 528 additions and 559 deletions

View File

@ -7,12 +7,8 @@ VITE_PUBLIC_PATH = /
# 开发环境路由历史模式Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数" # 开发环境路由历史模式Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数"
VITE_ROUTER_HISTORY = "hash" VITE_ROUTER_HISTORY = "hash"
# 接口地址
VITE_API_BASEURL = "http://192.168.2.33:5199/api" VITE_API_BASEURL = "http://192.168.2.33:5199/api"
# 接口地址
# VITE_API_BASEURL = "http://localhost:5199/api"
#数据中心后台地址 #数据中心后台地址
VITE_API_USERCENTER_URL = "https://dca.w.23544.com:8843/api" VITE_API_USERCENTER_URL = "https://dca.w.23544.com:8843/api"
# # 接口地址
# VITE_API_BASEURL = "https://learn-archives-admin-dev.23544.com/api"
# #数据中心后台地址
# VITE_API_USERCENTER_URL = "https://dca.w.23544.com:8843/api"

View File

@ -93,18 +93,13 @@ export enum ConditionalType {
} }
/** 字段设置项 */ /** 字段设置项 */
export class FieldSetting { export interface FieldSetting {
constructor() {
this.datasource = [];
this.mapValue= "value",
this.maplabel= "text"
}
/**map 时Value的取值的属性 */ /**map 时Value的取值的属性 */
mapValue?: string; mapValue?: string;
/**map 时label的取值的属性 */ /**map 时label的取值的属性 */
maplabel?: string; maplabel?: string;
/** 数据源 请求方式 */
datasourceStr?: string;
/** /**
* *
* @param value * @param value
@ -121,152 +116,44 @@ export interface ComboModel {
value: any; value: any;
text: string; text: string;
} }
/** 新增修改的配置 */ /** 表格列配置 */
export class TableColumnEdit { export interface TableColumn {
/** /** 显示标签 */
* label: string;
* @param add /** 是否可搜索 */
* @param edit search: boolean;
* @param multiple [type=dropdown] /** 搜索类型 */
* @param editShow searchType?: ConditionalType;
* @param editRows [type=textarea]
* @param rules
*/
constructor(
add: boolean = false,
edit: boolean = false,
multiple: boolean = false,
editShow: boolean = true,
editRows: number = 3,
editDefault: any = "",
rules: any | Array<any> = null,
change: () => void = null
) {
this.add = add;
this.edit = edit;
this.multiple = multiple;
this.editShow = editShow;
this.editRows = editRows;
this.editDefault = editDefault;
this.rules = rules;
this.change = change;
}
/** 是否允许添加 [false]*/ /** 是否允许添加 [false]*/
add?: boolean; add?: boolean;
/** 是否允许修改 [false]*/ /** 是否允许修改 [false]*/
edit?: boolean; edit?: boolean;
/** [type=dropdown]是否多选 */ /** 列宽度 [auto]*/
width?: string;
/** 字段类型 */
type?: "string" | "dropdown" | "switch" | "img" | "datetime" | "textarea";
/** 是否多选 */
multiple?: boolean; multiple?: boolean;
/** 编辑时显示列 */ /** 编辑时显示列 */
editShow?: boolean; editShow?: boolean;
/**校验规则 */ /**校验规则 */
rules?: any | Array<any>; rules?: any | Array<any>;
/** [type=textarea]编辑时的行数 */ /** 显示列 */
editRows?: number;
/** 新增编辑时的缓存值 */
valueE?: Array<string> | string | number | boolean | Date;
/** 新增编辑时的默认 */
editDefault?: Array<string> | string | number | boolean | Date;
/**编辑时值发生变化 */
change?: () => void;
}
/** 查询的配置 */
export class TableColumnSearch {
/**
*
* @param yes
* @param sort
* @param searchType
*/
constructor(yes: boolean = false,
searchType: ConditionalType = ConditionalType.Like,sort: boolean = false){
this.yes = yes;
this.sort = sort;
this.searchType = searchType;
}
/**可以查询 [false] */
yes?: boolean;
/** 可以排序 [false]*/
sort?: boolean;
/** 搜索类型 */
searchType?: ConditionalType;
/** 查询缓存值 */
value?: Array<string> | string | number | boolean | Date;
}
/** 表格列配置 */
export class TableColumn {
constructor(
) {
this.type = "string";
this.show = true;
this.search = new TableColumnSearch();
this.edit = new TableColumnEdit();
this.setting = {};
}
/** 显示标签 */
label: string;
/** 查询配置 */
search?: TableColumnSearch;
/** 编辑配置 */
edit?: TableColumnEdit;
/** Table中展示宽度 [auto]*/
width?: string;
/** 字段类型 */
type?: "string" | "dropdown" | "switch" | "img" | "datetime" | "textarea";
/** 显示列 [不会动态计算]*/
show?: boolean; show?: boolean;
/** 字段设置 */ /** 字段设置 */
setting?: FieldSetting; setting?: FieldSetting;
/** 修改时的编辑值 */
valueE?: Array<string> | string | number | boolean | Date;
/** 查询值 */
value?: Array<string> | string | number | boolean | Date;
/** textarea编辑时的行数 */
editRows?: number;
/**编辑时值发生变化 */
change?: () => void;
/**列值初始化时 如何获取默认取对应列*/ /**列值初始化时 如何获取默认取对应列*/
custom?: (row: any) => string; custom?: (row: any) => string;
} }
/** 表格列配置 */
// export interface TableColumn {
// /** 显示标签 */
// label: string;
// /** 是否可搜索 */
// search: boolean;
// /** 搜索类型 */
// searchType?: ConditionalType;
// /** 是否允许添加 [false]*/
// add?: boolean;
// /** 是否允许修改 [false]*/
// edit?: boolean;
// /** Table中展示宽度 [auto]*/
// width?: string;
// /** 字段类型 */
// type?: "string" | "dropdown" | "switch" | "img" | "datetime" | "textarea";
// /** 是否多选 */
// multiple?: boolean;
// /** 编辑时显示列 */
// editShow?: boolean;
// /**校验规则 */
// rules?: any | Array<any>;
// /** 显示列 */
// show?: boolean;
// /** 字段设置 */
// setting?: FieldSetting;
// /** 修改时的编辑值 */
// valueE?: Array<string> | string | number | boolean | Date;
// /** 查询值 */
// value?: Array<string> | string | number | boolean | Date;
// /** textarea编辑时的行数 */
// editRows?: number;
// /**编辑时值发生变化 */
// change?: () => void;
// /**列值初始化时 如何获取默认取对应列*/
// custom?: (row: any) => string;
// }
/** 分页数据 */ /** 分页数据 */
export interface PageData { export interface PageData {
/** 总条数 */ /** 总条数 */
@ -337,49 +224,3 @@ export interface TableConfig {
/**是否显示 */ /**是否显示 */
show?: boolean; show?: boolean;
} }
/** 初始化表格数据 */
export function intTableData(tValue: TableConfig): TableConfig {
if (!tValue.data) tValue.data = [];
if (!tValue.selectRows) tValue.selectRows = [];
if (tValue.border == null) tValue.border = true;
if (!tValue.pageData) tValue.pageData = { total: 0 };
if (tValue.operationTop === undefined) tValue.operationTop = true;
// 处理 column 的属性
for (const key in tValue.column) {
tValue.column[key] = { ...new TableColumn(), ...tValue.column[key] };
const element = tValue.column[key];
element.edit = { ...new TableColumnEdit(), ...element.edit };
element.search = { ...new TableColumnSearch(), ...element.search };
element.setting = { ...new FieldSetting(), ...element.setting };
if (
element.custom == undefined &&
(element.type === "switch" ||
element.type === "dropdown" ||
element.type === "string" ||
element.type === undefined)
) {
if (element.type === "string" || element.type === undefined)
element.custom = row => row[key];
else {
element.custom = row => {
let sc = element.setting.datasource.find(
s => s[element.setting.mapValue] + "" == row[key] + ""
);
return !sc ? row[key] : sc[element.setting.maplabel];
};
}
} else if (element.custom == undefined) {
element.custom = row => row[key];
}
}
// 处理 operationColumnData 的属性
for (const key in tValue.operationColumnData) {
const element = tValue.operationColumnData[key];
if (element.show === undefined) element.show = true;
}
return tValue;
}

View File

@ -55,11 +55,11 @@ function intiColumn() {
for (const key in editData.value.table.column) { for (const key in editData.value.table.column) {
const element = editData.value.table.column[key]; const element = editData.value.table.column[key];
if (editData.value.isedit) { if (editData.value.isedit) {
if (element.edit.edit) { if (element.edit) {
column.value[key] = element; column.value[key] = element;
} }
} else { } else {
if (element.edit.add) { if (element.add) {
column.value[key] = element; column.value[key] = element;
} }
} }
@ -81,8 +81,8 @@ function handleSubmitForm() {
} else form.id = 0; } else form.id = 0;
for (const key in column.value) { for (const key in column.value) {
const element = column.value[key]; const element = column.value[key];
if (element.edit.valueE !== null && element.edit.valueE !== "") { if (element.valueE !== null && element.valueE !== "") {
form[key] = element.edit.valueE; form[key] = element.valueE;
} }
} }
if (editData.value.table.editCallback) { if (editData.value.table.editCallback) {
@ -102,15 +102,14 @@ function handleSubmitForm() {
function handleResetForm() { function handleResetForm() {
for (const key in column.value) { for (const key in column.value) {
let item = column.value[key]; let item = column.value[key];
if (item.edit.editDefault != null) item.edit.valueE = item.edit.editDefault; if (Array.isArray(item.valueE)) {
else if (Array.isArray(item.edit.valueE)) { item.valueE = [];
item.edit.valueE = []; } else if (typeof item.valueE === "number") {
} else if (typeof item.edit.valueE === "number") { item.valueE = "";
item.edit.valueE = ""; } else if (typeof item.valueE === "boolean") {
} else if (typeof item.edit.valueE === "boolean") { item.valueE = false;
item.edit.valueE = false;
} else { } else {
item.edit.valueE = ""; item.valueE = "";
} }
} }
} }
@ -124,7 +123,7 @@ function fetchFormData() {
editData.value.frorm = res.data; editData.value.frorm = res.data;
for (const key in column.value) { for (const key in column.value) {
const element = column.value[key]; const element = column.value[key];
element.edit.valueE = res.data[key]; element.valueE = res.data[key];
} }
} }
editData.value.loading = true; editData.value.loading = true;
@ -146,32 +145,32 @@ function fetchFormData() {
> >
<el-form-item <el-form-item
v-for="(o, k, i) in column" v-for="(o, k, i) in column"
v-show="execute(o.edit['editShow'], o)" v-show="execute(o['editShow'], o)"
:key="i" :key="i"
:rules="o.edit.rules" :rules="o.rules"
:prop="'' + k + '.edit.valueE'" :prop="'' + k + '.valueE'"
:label="o.label" :label="o.label"
> >
<div v-if="o.type.trim() == 'datetime'"> <div v-if="o.type.trim() == 'datetime'">
<el-date-picker <el-date-picker
v-model="o.edit.valueE as Date" v-model="o.valueE as Date"
type="date" type="date"
format="YYYY-MM-DD" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
:placeholder="o.label" :placeholder="o.label"
class="elWidth" class="elWidth"
@change="o.edit.change" @change="o.change"
/> />
</div> </div>
<div v-else-if="o.type.trim() == 'dropdown'"> <div v-else-if="o.type.trim() == 'dropdown'">
<el-select <el-select
v-model="o.edit.valueE" v-model="o.valueE"
:multiple="o.edit.multiple" :multiple="o.multiple"
clearable clearable
filterable filterable
:placeholder="o.label" :placeholder="o.label"
class="elWidth" class="elWidth"
@change="o.edit.change" @change="o.change"
> >
<el-option <el-option
v-for="item in o.setting.datasource" v-for="item in o.setting.datasource"
@ -184,29 +183,25 @@ function fetchFormData() {
</div> </div>
<div v-else-if="o.type.trim() == 'textarea'"> <div v-else-if="o.type.trim() == 'textarea'">
<el-input <el-input
v-model="o.edit.valueE as string" v-model="o.valueE as string"
:rows="o.edit.editRows || 4" :rows="o.editRows || 4"
type="textarea" type="textarea"
:placeholder="o.label" :placeholder="o.label"
class="elWidth" class="elWidth"
@change="o.edit.change" @change="o.change"
/> />
</div> </div>
<div v-else-if="o.type.trim() == 'switch'"> <div v-else-if="o.type.trim() == 'switch'">
<el-switch <el-switch
v-model="o.edit.valueE as boolean" v-model="o.valueE as boolean"
active-text="启用" active-text="启用"
inactive-text="禁用" inactive-text="禁用"
class="elWidth" class="elWidth"
@change="o.edit.change" @change="o.change"
/> />
</div> </div>
<div v-else> <div v-else>
<el-input <el-input v-model="o.valueE as string" class="elWidth" :placeholder="o.label" />
v-model="o.edit.valueE as string"
class="elWidth"
:placeholder="o.label"
/>
</div> </div>
</el-form-item> </el-form-item>

View File

@ -15,16 +15,13 @@ import {
} from "vue"; } from "vue";
import { Search } from "@element-plus/icons-vue"; import { Search } from "@element-plus/icons-vue";
import { ElMessage, ElMessageBox, TableColumnCtx } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import { defineAsyncComponent, AsyncComponentLoader } from "vue"; import { defineAsyncComponent, AsyncComponentLoader } from "vue";
import { import {
ButtonCustomConfig, ButtonCustomConfig,
ConditionalType, ConditionalType,
Dialog, Dialog,
intTableData,
TableColumn, TableColumn,
TableColumnEdit,
TableColumnSearch,
TableConfig, TableConfig,
} from "./hTable"; } from "./hTable";
import hTableEdit from "./hTableEdit.vue"; import hTableEdit from "./hTableEdit.vue";
@ -77,7 +74,6 @@ let Api: hTableAPI = null;
const init = ref(false); const init = ref(false);
const tableHeight = ref(0); const tableHeight = ref(0);
let defaultOrderBy = null;
const dialog = ref<Dialog>({ const dialog = ref<Dialog>({
visible: false, visible: false,
@ -111,7 +107,36 @@ function appStyle() {
} }
function intdata() { function intdata() {
intTableData(table.value); if (!table.value.data) table.value.data = [];
if (!table.value.selectRows) table.value.selectRows = [];
if (table.value.border == null) table.value.border = true;
if (!table.value.pageData) table.value.pageData = { total: 0 };
if (table.value.operationTop === undefined) table.value.operationTop = true;
// column
for (const key in table.value.column) {
const element = table.value.column[key];
if (element.add === undefined) element.add = false;
if (element.edit === undefined) element.edit = false;
// Vue 3 $set
if (element.valueE === undefined) element.valueE = element.multiple ? [] : "";
if (element.value === undefined) element.value = element.multiple ? [] : "";
if (!element.type) element.type = "string";
if (element.show === undefined) element.show = true;
if (element.editShow === undefined) element.editShow = true;
if (!element.setting)
element.setting = { datasource: [], mapValue: "value", maplabel: "text" };
if (!element.setting.mapValue) element.setting.mapValue = "value";
if (!element.setting.maplabel) element.setting.maplabel = "text";
if (!element.change) element.change = () => {};
}
// operationColumnData
for (const key in table.value.operationColumnData) {
const element = table.value.operationColumnData[key];
if (element.show === undefined) element.show = true;
}
} }
function rowKeyFun(row) { function rowKeyFun(row) {
@ -231,13 +256,13 @@ function handleAddCallback() {
function handleResetForm() { function handleResetForm() {
for (const key in table.value.column) { for (const key in table.value.column) {
let item = table.value.column[key]; let item = table.value.column[key];
if (Array.isArray(item.edit.valueE)) { if (Array.isArray(item.valueE)) {
item.edit.valueE = []; item.valueE = [];
} else if (typeof item.edit.valueE === "number") { } else if (typeof item.valueE === "number") {
item.edit.valueE = ""; item.valueE = "";
} else if (typeof item.edit.valueE === "boolean") { } else if (typeof item.valueE === "boolean") {
} else { } else {
item.edit.valueE = ""; item.valueE = "";
} }
} }
} }
@ -252,21 +277,6 @@ function pageIndexChange(o) {
table.value.search.PageIndex = o - 1; table.value.search.PageIndex = o - 1;
fetchPagedData(); fetchPagedData();
} }
/**
* 排序变化时
* @param selection
*/
function sortChange(data: { column: TableColumnCtx<any>; prop: string; order: any }) {
if (data.order == undefined) {
table.value.search.OrderBy = defaultOrderBy.OrderBy;
table.value.search.OrderByType = defaultOrderBy.OrderByType;
} else {
table.value.search.OrderBy = data.prop;
table.value.search.OrderByType = data.order === "ascending" ? 1 : 0;
}
handleReloadPaged();
}
// //
function handleSelectionChange(selection) { function handleSelectionChange(selection) {
console.log("selection-change", selection); console.log("selection-change", selection);
@ -277,23 +287,17 @@ function searchReload() {
for (let name in table.value.column) { for (let name in table.value.column) {
if ( if (
!table.value.column[name].search || !table.value.column[name].search ||
table.value.column[name].search.value === undefined || table.value.column[name].value === undefined ||
table.value.column[name].search.value === null || table.value.column[name].value === null ||
table.value.column[name].search.value === "" table.value.column[name].value === ""
) { ) {
continue; continue;
} }
table.value.column[name].search.value = ""; table.value.column[name].value = "";
} }
} }
// //
function handleReloadPaged(reload = true) { function handleReloadPaged(reload = true) {
if (defaultOrderBy == null) {
defaultOrderBy = {
OrderBy: table.value.search.OrderBy,
OrderByType: table.value.search.OrderByType,
};
}
if (table.value.search === undefined || table.value.search.PageIndex === undefined) { if (table.value.search === undefined || table.value.search.PageIndex === undefined) {
table.value.search.PageIndex = 0; table.value.search.PageIndex = 0;
table.value.search.PageSize = 20; table.value.search.PageSize = 20;
@ -302,9 +306,9 @@ function handleReloadPaged(reload = true) {
for (let name in table.value.column) { for (let name in table.value.column) {
if ( if (
!table.value.column[name].search || !table.value.column[name].search ||
table.value.column[name].search.value === undefined || table.value.column[name].value === undefined ||
table.value.column[name].search.value === null || table.value.column[name].value === null ||
table.value.column[name].search.value === "" table.value.column[name].value === ""
) { ) {
continue; continue;
} }
@ -319,10 +323,10 @@ function handleReloadPaged(reload = true) {
} else data.ConditionalType = ConditionalType.Equal; } else data.ConditionalType = ConditionalType.Equal;
data.FieldName = name.charAt(0).toUpperCase() + name.slice(1); data.FieldName = name.charAt(0).toUpperCase() + name.slice(1);
data.FieldValue = table.value.column[name].search.value.toString(); data.FieldValue = table.value.column[name].value.toString();
if (table.value.column[name].search.searchType != undefined) { if (table.value.column[name].searchType != undefined) {
let v: number = table.value.column[name].search.searchType || 0; let v: number = table.value.column[name].searchType || 0;
data.ConditionalType = v; data.ConditionalType = v;
} }
table.value.search.Conditions.push(data); table.value.search.Conditions.push(data);
@ -338,6 +342,37 @@ function handleReloadPaged(reload = true) {
} }
// //
async function fetchInitData() { async function fetchInitData() {
for (const key in table.value.column) {
const element = table.value.column[key];
if (element.type === "dropdown") {
if (!element.setting.datasource) {
//
// let rdata = await eval(element.setting.datasourceStr);
// element.setting.datasource = rdata.data;
// console.log(key + " " + element.setting.datasourceStr, rdata);
}
}
if (
element.custom == undefined &&
(element.type === "switch" ||
element.type === "dropdown" ||
element.type === "string" ||
element.type === undefined)
) {
if (element.type === "string" || element.type === undefined)
element.custom = (row) => row[key];
else {
element.custom = (row) => {
let sc = element.setting.datasource.find(
(s) => s[element.setting.mapValue] + "" == row[key] + ""
);
return !sc ? row[key] : sc[element.setting.maplabel];
};
}
} else if (element.custom == undefined) {
element.custom = (row) => row[key];
}
}
setTimeout(() => { setTimeout(() => {
init.value = true; init.value = true;
appStyle(); appStyle();
@ -380,10 +415,10 @@ function fetchPagedData() {
<div ref="appB_S" class="search-container1"> <div ref="appB_S" class="search-container1">
<!-- 搜索项目 --> <!-- 搜索项目 -->
<el-form v-if="table.search.show" :inline="true" :model="table.search"> <el-form v-if="table.search.show" :inline="true" :model="table.search">
<el-form-item v-for="(o, n, i) in table.column" v-show="o.search.yes" :key="i"> <el-form-item v-for="(o, n, i) in table.column" v-show="o.search" :key="i">
<el-date-picker <el-date-picker
v-if="o.type.trim() == 'datetime'" v-if="o.type.trim() == 'datetime'"
v-model="o.search.value as Date" v-model="o.value as Date"
type="date" type="date"
format="YYYY-MM-DD" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@ -392,8 +427,8 @@ function fetchPagedData() {
/> />
<el-select <el-select
v-else-if="o.type.trim() == 'dropdown'" v-else-if="o.type.trim() == 'dropdown'"
v-model="o.search.value" v-model="o.value"
:multiple="o.edit.multiple" :multiple="o.multiple"
clearable clearable
filterable filterable
:placeholder="o.label" :placeholder="o.label"
@ -409,7 +444,7 @@ function fetchPagedData() {
</el-select> </el-select>
<el-select <el-select
v-else-if="o.type.trim() == 'switch'" v-else-if="o.type.trim() == 'switch'"
v-model="o.search.value" v-model="o.value"
clearable clearable
filterable filterable
:placeholder="o.label" :placeholder="o.label"
@ -419,7 +454,7 @@ function fetchPagedData() {
<el-option autocomplete="off" :label="'禁用'" :value="false" /> <el-option autocomplete="off" :label="'禁用'" :value="false" />
</el-select> </el-select>
<div v-else-if="o.type.trim() == 'img'" v-show="false" /> <div v-else-if="o.type.trim() == 'img'" v-show="false" />
<el-input v-else v-model="o.search.value as string" :placeholder="o.label" /> <el-input v-else v-model="o.value as string" :placeholder="o.label" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" :icon="Search" @click="handleReloadPaged(false)" <el-button type="primary" :icon="Search" @click="handleReloadPaged(false)"
@ -487,7 +522,6 @@ function fetchPagedData() {
style="width: 100%" style="width: 100%"
:row-key="rowKeyFun" :row-key="rowKeyFun"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
@sort-change="sortChange"
> >
<el-table-column v-if="table.selectColumn" type="selection" width="40" /> <el-table-column v-if="table.selectColumn" type="selection" width="40" />
<el-table-column <el-table-column
@ -523,7 +557,6 @@ function fetchPagedData() {
:prop="name" :prop="name"
:label="item.label" :label="item.label"
:width="item.width" :width="item.width"
:sortable="item.search.sort ? `custom` : false"
> >
<template v-slot="scope"> <template v-slot="scope">
<div class="columnTemplate"> <div class="columnTemplate">

View File

@ -40,14 +40,6 @@ export const ruleNumber = [
trigger: "blur" trigger: "blur"
} }
]; ];
export const ruleClassName = [
{
pattern: /^[1-9]\d*班$/,
message: "请输入正确班级名称[例:101班]",
trigger: "blur"
},
...ruleRequired
];
export const ruleRequiredNumber = [ export const ruleRequiredNumber = [
{ required: true, message: "不能为空", trigger: "blur" }, { required: true, message: "不能为空", trigger: "blur" },
{ {

View File

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { ConditionalType, intTableData, TableConfig } from "@/components/hTable/hTable"; import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
import { onMounted, ref, defineOptions } from "vue"; import { onMounted, ref, defineOptions } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
import { hTableAPI } from "@/api/hTable"; import { hTableAPI } from "@/api/hTable";
@ -29,7 +29,7 @@ function searchCallback(data) {
} }
const RoleApi = new hTableAPI("AdminRole"); const RoleApi = new hTableAPI("AdminRole");
const table = ref<{ initTable: (config: TableConfig) => void }>(null); const table = ref<{ initTable: (config: TableConfig) => void }>(null);
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: ControllerName, apiUrl: ControllerName,
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -70,41 +70,63 @@ const tableData: TableConfig = intTableData({
// //
id: { id: {
label: "编号", label: "编号",
search: { yes: true, searchType: ConditionalType.Equal }, search: true,
add: false, //
edit: false, //
width: "150px", width: "150px",
}, },
name: { name: {
label: "名称", label: "名称",
width: "180px", width: "180px",
search: { yes: true, searchType: ConditionalType.Like }, rules: ruleRequiredI(12, 2),
edit: { add: true, edit: true, rules: ruleRequiredI(12, 2) }, search: true,
searchType: ConditionalType.Like,
add: true, //
edit: true, //
}, },
phone: { phone: {
label: "手机号", label: "手机号",
rules: rulePhone,
width: "200px", width: "200px",
search: { yes: true, searchType: ConditionalType.Like }, search: true,
edit: { add: true, edit: true, rules: rulePhone }, add: true, //
edit: true, //
}, },
account: { account: {
label: "账号", label: "账号",
search: { yes: true }, rules: ruleRequiredI(20, 8),
edit: { add: true, edit: false, rules: ruleRequiredI(20, 8) }, search: true,
add: true, //
edit: false, //
}, },
password: { password: {
label: "密码", label: "密码",
show: false, show: false,
edit: { add: true, edit: false, rules: ruleRequiredI(32, 6) }, /**长度必须大于6 */
rules: ruleRequiredI(32, 6),
search: false,
add: true, //
edit: false, //
}, },
enable: { enable: {
label: "启用", label: "启用",
type: "switch", type: "switch",
edit: { add: true, edit: true, editDefault: true }, search: false,
add: true, //
edit: true, //
valueE: true, //
}, },
roleId: { roleId: {
label: "角色", label: "角色",
type: "dropdown", type: "dropdown",
search: { yes: true }, rules: ruleRequired,
edit: { add: true, edit: false, rules: ruleRequired }, search: true,
add: true, //
edit: false, //
setting: {
datasource: [],
},
}, },
}, },
data: [], data: [],
@ -112,7 +134,7 @@ const tableData: TableConfig = intTableData({
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
const showTable = ref(false); const showTable = ref(false);
onMounted(async () => { onMounted(async () => {

View File

@ -1,18 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
ConditionalType,
intTableData,
TableColumn,
TableColumnEdit,
TableColumnSearch,
TableConfig,
} from "@/components/hTable/hTable";
import { onMounted, ref, defineOptions } from "vue"; import { onMounted, ref, defineOptions } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
import { hTableAPI } from "@/api/hTable"; import { hTableAPI } from "@/api/hTable";
import { getenum } from "@/api/enum"; import { getenum } from "@/api/enum";
import { ruleClassName, ruleRequired } from "@/utils/rules"; import { ruleRequired } from "@/utils/rules";
const ControllerName = "classes"; const ControllerName = "classes";
defineOptions({ defineOptions({
@ -23,7 +16,7 @@ const SchoolApi = new hTableAPI("usercenter/back/schools");
function searchCallback(data) {} function searchCallback(data) {}
const table = ref<{ initTable: (config: TableConfig) => void }>(); const table = ref<{ initTable: (config: TableConfig) => void }>();
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: "usercenter/back/classes", apiUrl: "usercenter/back/classes",
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -73,57 +66,98 @@ const tableData: TableConfig = intTableData({
// //
id: { id: {
label: "编号", label: "编号",
search: true,
add: false, //
edit: false, //
width: "150px", width: "150px",
}, },
schoolId: { schoolId: {
label: "学校", label: "学校",
width: "180px",
type: "dropdown",
search: new TableColumnSearch(true),
edit: {
rules: ruleRequired, rules: ruleRequired,
}, width: "180px",
}, search: true,
Grade: {
label: "年级",
width: "220px",
type: "dropdown", type: "dropdown",
custom: (row) => `${row.grade ?? ""} [${row.gradeLevel + row.graduationYear}]`, add: true, //
search: new TableColumnSearch(true), edit: true, //
edit: { add: true, edit: false, rules: ruleRequired }, setting: {},
}, },
name: { name: {
label: "名称", label: "名称",
rules: ruleRequired,
width: "180px", width: "180px",
search: { search: true,
yes: true,
searchType: ConditionalType.Like, // searchType: ConditionalType.Like, //
add: true, //
edit: true, //
}, },
edit: { Grade: {
add: true, label: "年级",
edit: true, rules: ruleRequired,
rules: ruleClassName, width: "180px",
}, type: "dropdown",
custom: (row) => `${row.grade ?? ""}`,
// `${row.grade ?? ""} ${row.gradeLevel + row.graduationYear}`,
search: true,
setting: {},
add: true, //
edit: false, //
}, },
// GradeLevel: {
// label: "",
// search: false,
// type: "dropdown",
// searchType: ConditionalType.Like,
// add: true, //
// edit: true, //
// width: "70px",
// setting: {
// datasource: [
// { text: "", value: "" },
// { text: "", value: "" },
// { text: "", value: "" }
// ]
// }
// },
// GraduationYear: {
// label: "",
// search: false,
// add: true, //
// edit: true, //
// width: "80px"
// },
type: { type: {
label: "类型", label: "类型",
type: "dropdown",
search: {
yes: true,
},
edit: {
add: true,
edit: true,
rules: ruleRequired, rules: ruleRequired,
// width: "150px",
type: "dropdown",
search: true,
add: true, //
edit: true, //
setting: {},
}, },
}, // createTime: {
// label: "",
// width: "180px",
// type: "datetime",
// search: true,
// add: false, //
// edit: false //
// },
// remark: {
// label: "",
// type: "textarea",
// editRows: 3,
// search: false,
// add: true, //
// edit: true //
// }
}, },
data: [], data: [],
pageData: { pageData: {
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
const showTable = ref(false); const showTable = ref(false);
onMounted(async () => { onMounted(async () => {

View File

@ -1,11 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
ConditionalType,
intTableData,
TableColumnSearch,
TableConfig,
} from "@/components/hTable/hTable";
import { onMounted, ref, defineOptions } from "vue"; import { onMounted, ref, defineOptions } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
import { hTableAPI } from "@/api/hTable"; import { hTableAPI } from "@/api/hTable";
@ -26,7 +21,7 @@ const props = defineProps<{
function searchCallback(data) {} function searchCallback(data) {}
const table = ref<{ initTable: (config: TableConfig) => void }>(); const table = ref<{ initTable: (config: TableConfig) => void }>();
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: ControllerName, apiUrl: ControllerName,
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -80,22 +75,33 @@ const tableData: TableConfig = intTableData({
// //
schoolName: { schoolName: {
label: "学校", label: "学校",
search: true,
searchType: ConditionalType.Like, //
add: false, //
edit: false, //
width: "180px", width: "180px",
search: new TableColumnSearch(true, ConditionalType.Like),
}, },
grade: { grade: {
label: "年级", label: "年级",
width: "100px", width: "100px",
search: new TableColumnSearch(true), search: true,
add: false, //
edit: false, //
}, },
className: { className: {
label: "班级", label: "班级",
width: "150px", width: "150px",
search: new TableColumnSearch(true, ConditionalType.Like), search: true,
searchType: ConditionalType.Like, //
add: false, //
edit: false, //
}, },
peopleCount: { peopleCount: {
label: "参考人数", label: "参考人数",
width: "100px", width: "100px",
search: false,
add: false, //
edit: false, //
}, },
// entryPerson: { // entryPerson: {
// label: "", // label: "",
@ -107,6 +113,9 @@ const tableData: TableConfig = intTableData({
createTime: { createTime: {
label: "录入时间", label: "录入时间",
width: "200px", width: "200px",
search: false,
add: false, //
edit: false, //
}, },
}, },
data: [], data: [],
@ -114,7 +123,7 @@ const tableData: TableConfig = intTableData({
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
async function deleteInfo(o, row, c) { async function deleteInfo(o, row, c) {
try { try {

View File

@ -1,11 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
ConditionalType,
intTableData,
TableColumnSearch,
TableConfig,
} from "@/components/hTable/hTable";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
import { hTableAPI } from "@/api/hTable"; import { hTableAPI } from "@/api/hTable";
@ -23,7 +18,7 @@ const props = defineProps<{
function searchCallback(data) {} function searchCallback(data) {}
const table = ref<{ initTable: (config: TableConfig) => void }>(); const table = ref<{ initTable: (config: TableConfig) => void }>();
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: ControllerName, apiUrl: ControllerName,
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -58,39 +53,52 @@ const tableData: TableConfig = intTableData({
// //
schoolName: { schoolName: {
label: "学校", label: "学校",
search: true,
searchType: ConditionalType.Like, //
add: false, //
edit: false, //
width: "180px", width: "180px",
search: new TableColumnSearch(true, ConditionalType.Like),
}, },
grade: { grade: {
label: "年级", label: "年级",
width: "120px", width: "120px",
search: new TableColumnSearch(true), // custom: (s) => `${s.gradeLevel}${s.gradeYear}`,
search: true,
add: false, //
edit: false, //
}, },
className: { className: {
label: "班级", label: "班级",
width: "80px", width: "80px",
search: new TableColumnSearch(true, ConditionalType.Like), search: true,
searchType: ConditionalType.Like, //
add: false, //
edit: false, //
}, },
examName: { examName: {
label: "最近考试", label: "最近考试",
width: "200px", width: "200px",
search: false,
}, },
peopleCount: { peopleCount: {
label: "参考人数", label: "参考人数",
width: "100px", width: "100px",
search: false,
}, },
onLineCount: { onLineCount: {
label: "重本人数", label: "重本人数",
width: "100px", width: "100px",
search: false,
}, },
onLineRate: { onLineRate: {
label: "重本率", label: "重本率",
width: "100px", width: "100px",
custom: (row) => `${row.onLineRate * 100}%`, custom: (row) => `${row.onLineRate * 100}%`,
search: false,
}, },
onLineRanking: { onLineRanking: {
label: "重本率排名", label: "重本率排名",
width: "100px", search: false,
}, },
}, },
data: [], data: [],
@ -98,7 +106,7 @@ const tableData: TableConfig = intTableData({
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
const showTable = ref(false); const showTable = ref(false);
onMounted(async () => { onMounted(async () => {

View File

@ -1,11 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
ConditionalType,
intTableData,
TableColumnSearch,
TableConfig,
} from "@/components/hTable/hTable";
import { onMounted, ref, defineOptions } from "vue"; import { onMounted, ref, defineOptions } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
import { hTableAPI } from "@/api/hTable"; import { hTableAPI } from "@/api/hTable";
@ -27,7 +22,7 @@ const props = defineProps<{
function searchCallback(data) {} function searchCallback(data) {}
const table = ref<{ initTable: (config: TableConfig) => void }>(); const table = ref<{ initTable: (config: TableConfig) => void }>();
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: `ExamClassInfo`, apiUrl: `ExamClassInfo`,
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -68,63 +63,76 @@ const tableData: TableConfig = intTableData({
// //
examName: { examName: {
label: "考试名称", label: "考试名称",
search: true,
width: "150px", width: "150px",
search: new TableColumnSearch(true),
}, },
type: { type: {
label: "考试类型", label: "考试类型",
width: "80px", search: true,
type: "dropdown", type: "dropdown",
search: new TableColumnSearch(true), setting: {},
width: "80px",
}, },
testPaperType: { testPaperType: {
label: "试卷类型", label: "试卷类型",
width: "80px", search: true,
type: "dropdown", type: "dropdown",
search: new TableColumnSearch(true), setting: {},
width: "80px",
}, },
grade: { grade: {
label: "年级", label: "年级",
search: true,
// type: "dropdown",
// setting: {},
width: "60px", width: "60px",
search: new TableColumnSearch(true),
}, },
onLineCount: { onLineCount: {
label: "重本人数", label: "重本人数",
search: false,
width: "80px", width: "80px",
}, },
onLineRate: { onLineRate: {
label: "重本率", label: "重本率",
search: false,
custom: (row) => `${Math.round(row.onLineRate * 100)}%`, custom: (row) => `${Math.round(row.onLineRate * 100)}%`,
width: "80px", width: "80px",
}, },
onLineRanking: { onLineRanking: {
label: "重本率排名", label: "重本率排名",
search: false,
width: "100px", width: "100px",
}, },
maxScore: { maxScore: {
label: "最高分[赋分]", label: "最高分[赋分]",
search: false,
width: "140px", width: "140px",
}, },
minScore: { minScore: {
label: "最低分[赋分]", label: "最低分[赋分]",
search: false,
width: "140px", width: "140px",
}, },
average: { average: {
label: "总平均分[赋分]", label: "总平均分[赋分]",
search: false,
custom: (row) => `${Math.round(row.average)}`, custom: (row) => `${Math.round(row.average)}`,
width: "140px", width: "140px",
}, },
average1: { average1: {
label: "资源校平均分[赋分]", label: "资源校平均分[赋分]",
search: false,
width: "160px", width: "160px",
}, },
averageRank: { averageRank: {
label: "总平均分排名", label: "总平均分排名",
search: false,
width: "110px", width: "110px",
}, },
rank: { rank: {
label: "远端平均/资源校平均", label: "远端平均/资源校平均",
search: false,
width: "95px", width: "95px",
custom: (row) => custom: (row) =>
`${ `${
@ -139,7 +147,7 @@ const tableData: TableConfig = intTableData({
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
const showTable = ref(false); const showTable = ref(false);
onMounted(async () => { onMounted(async () => {

View File

@ -1,11 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
ConditionalType,
intTableData,
TableColumnSearch,
TableConfig,
} from "@/components/hTable/hTable";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
import { hTableAPI } from "@/api/hTable"; import { hTableAPI } from "@/api/hTable";
@ -29,7 +24,7 @@ defineOptions({
function searchCallback(data) {} function searchCallback(data) {}
const table = ref<{ initTable: (config: TableConfig) => void }>(); const table = ref<{ initTable: (config: TableConfig) => void }>();
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: ControllerName, apiUrl: ControllerName,
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -97,85 +92,81 @@ const tableData: TableConfig = intTableData({
// //
id: { id: {
label: "编号", label: "编号",
search: new TableColumnSearch(true), search: true,
add: false, //
edit: false, //
width: "150px", width: "150px",
}, },
name: { name: {
label: "考试名称", label: "考试名称",
width: "200px",
search: new TableColumnSearch(true, ConditionalType.Like), //
edit: {
add: true,
edit: true,
rules: ruleRequired, rules: ruleRequired,
}, width: "200px",
search: true,
searchType: ConditionalType.Like, //
add: true, //
edit: true, //
setting: {},
}, },
grade: { grade: {
label: "年级", label: "年级",
width: "100px",
search: new TableColumnSearch(true),
edit: {
add: true,
edit: false,
rules: ruleRequiredGrade, rules: ruleRequiredGrade,
}, width: "100px",
search: true,
add: true, //
edit: false, //
}, },
testPaperType: { testPaperType: {
label: "试卷类型", label: "试卷类型",
rules: ruleRequired,
width: "100px", width: "100px",
type: "dropdown", type: "dropdown",
search: new TableColumnSearch(true), setting: {},
edit: { search: true,
add: true, add: true, //
edit: true, edit: true, //
rules: ruleRequired,
},
}, },
type: { type: {
label: "考试类型", label: "考试类型",
rules: ruleRequired,
width: "100px", width: "100px",
type: "dropdown", type: "dropdown",
search: new TableColumnSearch(true), setting: {},
edit: { search: true,
add: true, add: true, //
edit: true, edit: true, //
rules: ruleRequired,
},
}, },
scoreLine: { scoreLine: {
label: "划线分数", label: "划线分数",
width: "100px",
edit: {
add: true,
edit: true,
rules: ruleNumber, rules: ruleNumber,
}, search: false,
width: "100px",
add: true, //
edit: true, //
}, },
baseSchoolScore: { baseSchoolScore: {
label: "资源校平均分", label: "资源校平均分",
width: "150px",
edit: {
add: true,
edit: true,
rules: ruleNumber, rules: ruleNumber,
}, search: false,
width: "150px",
add: true, //
edit: true, //
}, },
startTime: { startTime: {
label: "考试时间", label: "考试时间",
width: "210px", width: "210px",
type: "datetime",
custom: (row) => row.startTime?.replace("T", " ").substring(0, 10) ?? "",
search: new TableColumnSearch(true),
edit: {
add: true,
edit: true,
rules: ruleRequired, rules: ruleRequired,
}, search: true,
type: "datetime",
setting: {},
add: true, //
edit: true, //
}, },
createTime: { createTime: {
label: "创建时间", label: "创建时间",
type: "datetime", type: "datetime",
custom: (row) => row.startTime?.replace("T", " ").substring(0, 10) ?? "", search: false,
add: false, //
edit: false, //
}, },
}, },
data: [], data: [],
@ -183,7 +174,7 @@ const tableData: TableConfig = intTableData({
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
function DwImportTemplate(obj, row, callBack) { function DwImportTemplate(obj, row, callBack) {
const baseUrl = import.meta.env.VITE_API_BASEURL; const baseUrl = import.meta.env.VITE_API_BASEURL;

View File

@ -1,11 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
ConditionalType,
intTableData,
TableColumnSearch,
TableConfig,
} from "@/components/hTable/hTable";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
import { hTableAPI } from "@/api/hTable"; import { hTableAPI } from "@/api/hTable";
@ -23,7 +18,7 @@ const props = defineProps<{
function searchCallback(data) {} function searchCallback(data) {}
const table = ref<{ initTable: (config: TableConfig) => void }>(); const table = ref<{ initTable: (config: TableConfig) => void }>();
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: ControllerName, apiUrl: ControllerName,
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -49,6 +44,26 @@ const tableData: TableConfig = intTableData({
}, },
operationColumn: true, // operationColumn: true, //
operationColumnData: [ operationColumnData: [
{
//
topBtn: true, //
label: "成绩升序",
btnStyle: "primary",
click: (o, r, c) => {
tableData.search.OrderByType = 1;
c();
},
},
{
//
topBtn: true, //
label: "成绩降序",
btnStyle: "primary",
click: (o, r, c) => {
tableData.search.OrderByType = 0;
c();
},
},
{ {
topBtn: false, // topBtn: false, //
label: "个人详情", label: "个人详情",
@ -66,61 +81,72 @@ const tableData: TableConfig = intTableData({
// //
userName: { userName: {
label: "姓名", label: "姓名",
search: true,
searchType: ConditionalType.Like, //
width: "180px", width: "180px",
search: new TableColumnSearch(true, ConditionalType.Like),
}, },
语文: { 语文: {
label: "语文", label: "语文",
search: false,
width: "100px", width: "100px",
custom: (row) => row.subjectDic.语文, custom: (row) => row.subjectDic.语文,
search: { sort: true },
}, },
数学: { 数学: {
label: "数学", label: "数学",
search: false,
width: "100px", width: "100px",
custom: (row) => row.subjectDic.数学, custom: (row) => row.subjectDic.数学,
}, },
英语: { 英语: {
label: "英语", label: "英语",
search: false,
width: "100px", width: "100px",
custom: (row) => row.subjectDic.英语, custom: (row) => row.subjectDic.英语,
}, },
物理: { 物理: {
label: "物理", label: "物理",
search: false,
width: "100px", width: "100px",
custom: (row) => row.subjectDic.物理, custom: (row) => row.subjectDic.物理,
}, },
化学: { 化学: {
label: "化学", label: "化学",
search: false,
width: "100px", width: "100px",
custom: (row) => row.subjectDic.化学, custom: (row) => row.subjectDic.化学,
}, },
生物: { 生物: {
label: "生物", label: "生物",
search: false,
width: "100px", width: "100px",
custom: (row) => row.subjectDic.生物, custom: (row) => row.subjectDic.生物,
}, },
政治: { 政治: {
label: "政治", label: "政治",
search: false,
width: "100px", width: "100px",
custom: (row) => row.subjectDic.政治, custom: (row) => row.subjectDic.政治,
}, },
历史: { 历史: {
label: "历史", label: "历史",
search: false,
width: "100px", width: "100px",
custom: (row) => row.subjectDic.历史, custom: (row) => row.subjectDic.历史,
}, },
地理: { 地理: {
label: "地理", label: "地理",
search: false,
width: "100px", width: "100px",
custom: (row) => row.subjectDic.地理 ?? "--", custom: (row) => row.subjectDic.地理 ?? "--",
}, },
assignScore: { assignScore: {
label: "赋分总分", label: "赋分总分",
search: false,
width: "180px", width: "180px",
}, },
assignRanking: { assignRanking: {
label: "赋分后的排名", label: "赋分后的排名",
search: false,
width: "200px", width: "200px",
}, },
}, },
@ -129,11 +155,12 @@ const tableData: TableConfig = intTableData({
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
const showTable = ref(false); const showTable = ref(false);
onMounted(async () => { onMounted(async () => {
// //
showTable.value = true; showTable.value = true;
}); });
const exam = props.data[0]; const exam = props.data[0];

View File

@ -1,11 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
ConditionalType,
intTableData,
TableColumnSearch,
TableConfig,
} from "@/components/hTable/hTable";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
import { hTableAPI } from "@/api/hTable"; import { hTableAPI } from "@/api/hTable";
@ -24,7 +19,7 @@ const props = defineProps<{
function searchCallback(data) {} function searchCallback(data) {}
const table = ref<{ initTable: (config: TableConfig) => void }>(); const table = ref<{ initTable: (config: TableConfig) => void }>();
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: ControllerName, apiUrl: ControllerName,
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -33,7 +28,7 @@ const tableData: TableConfig = intTableData({
// //
show: true, show: true,
PageIndex: 0, PageIndex: 0,
PageSize: 999, PageSize: 60,
OrderBy: "Id", // OrderBy: "Id", //
OrderByType: 1, OrderByType: 1,
defaultConditions: [ defaultConditions: [
@ -50,80 +45,94 @@ const tableData: TableConfig = intTableData({
// //
examName: { examName: {
label: "考试名称", label: "考试名称",
search: new TableColumnSearch(true, ConditionalType.Like), search: true,
searchType: ConditionalType.Like, //
width: "180px", width: "180px",
}, },
// //
type: { type: {
label: "考试类型", label: "考试类型",
width: "150px", search: true,
type: "dropdown", type: "dropdown",
search: new TableColumnSearch(true), setting: {},
width: "150px",
}, },
// //
grade: { grade: {
label: "考试阶段", label: "考试阶段",
search: true,
searchType: ConditionalType.Like, //
width: "120px", width: "120px",
search: new TableColumnSearch(true, ConditionalType.Like),
}, // }, //
testPaperType: { testPaperType: {
label: "试卷类型", label: "试卷类型",
width: "150px", search: true,
type: "dropdown", type: "dropdown",
search: new TableColumnSearch(true), setting: {},
width: "150px",
}, },
语文: { 语文: {
label: "语文", label: "语文",
search: false,
width: "80px", width: "80px",
custom: (row) => row.subjectDic.语文 ?? "--", custom: (row) => row.subjectDic.语文 ?? "--",
search: { sort: true },
}, },
数学: { 数学: {
label: "数学", label: "数学",
search: false,
width: "80px", width: "80px",
custom: (row) => row.subjectDic.数学 ?? "--", custom: (row) => row.subjectDic.数学 ?? "--",
}, },
英语: { 英语: {
label: "英语", label: "英语",
search: false,
width: "80px", width: "80px",
custom: (row) => row.subjectDic.英语 ?? "--", custom: (row) => row.subjectDic.英语 ?? "--",
}, },
物理: { 物理: {
label: "物理", label: "物理",
search: false,
width: "80px", width: "80px",
custom: (row) => row.subjectDic.物理 ?? "--", custom: (row) => row.subjectDic.物理 ?? "--",
}, },
化学: { 化学: {
label: "化学", label: "化学",
search: false,
width: "80px", width: "80px",
custom: (row) => row.subjectDic.化学 ?? "--", custom: (row) => row.subjectDic.化学 ?? "--",
}, },
生物: { 生物: {
label: "生物", label: "生物",
search: false,
width: "80px", width: "80px",
custom: (row) => row.subjectDic.生物 ?? "--", custom: (row) => row.subjectDic.生物 ?? "--",
}, },
政治: { 政治: {
label: "政治", label: "政治",
search: false,
width: "80px", width: "80px",
custom: (row) => row.subjectDic.政治 ?? "--", custom: (row) => row.subjectDic.政治 ?? "--",
}, },
历史: { 历史: {
label: "历史", label: "历史",
search: false,
width: "80px", width: "80px",
custom: (row) => row.subjectDic.历史 ?? "--", custom: (row) => row.subjectDic.历史 ?? "--",
}, },
地理: { 地理: {
label: "地理", label: "地理",
search: false,
width: "80px", width: "80px",
custom: (row) => row.subjectDic.地理 ?? "--", custom: (row) => row.subjectDic.地理 ?? "--",
}, },
assignScore: { assignScore: {
label: "赋分总分", label: "赋分总分",
search: false,
width: "80px", width: "80px",
}, },
assignRanking: { assignRanking: {
label: "赋分后的排名", label: "赋分后的排名",
search: false,
width: "120px", width: "120px",
}, },
}, },
@ -132,7 +141,7 @@ const tableData: TableConfig = intTableData({
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
const showTable = ref(false); const showTable = ref(false);
const exam = props.data[0]; const exam = props.data[0];

View File

@ -9,7 +9,7 @@ import { ruleRequired } from "@/utils/rules";
const ControllerName = "Grade"; const ControllerName = "Grade";
defineOptions({ defineOptions({
name: ControllerName, name: ControllerName
}); });
const SchoolApi = new hTableAPI("usercenter/back/schools"); const SchoolApi = new hTableAPI("usercenter/back/schools");
@ -28,7 +28,7 @@ const tableData: TableConfig = {
PageSize: 20, PageSize: 20,
OrderBy: "CreateTime", // OrderBy: "CreateTime", //
defaultConditions: [], // defaultConditions: [], //
Conditions: [], Conditions: []
}, },
operationColumn: true, // operationColumn: true, //
operationColumnData: [ operationColumnData: [
@ -36,90 +36,92 @@ const tableData: TableConfig = {
// //
topBtn: false, // topBtn: false, //
label: "修改", label: "修改",
btnType: "edit", // add edit del custom btnType: "edit" // add edit del custom
}, },
{ {
// //
topBtn: true, // topBtn: true, //
label: "添加", label: "添加",
btnStyle: "success", btnStyle: "success",
btnType: "add", // add edit del custom btnType: "add" // add edit del custom
}, },
{ {
topBtn: false, // topBtn: false, //
show: true, show: true,
label: "删除", label: "删除",
btnType: "del", // add edit del btnType: "del", // add edit del
btnStyle: "danger", // topBtn: true success danger btnStyle: "danger" // topBtn: true success danger
}, }
], ],
column: { column: {
// // //
// id: { id: {
// label: "", label: "编号",
// search: true, search: true,
// add: false, // add: false, //
// edit: false, // edit: false, //
// width: "150px" width: "150px"
// }, },
// schoolId: { schoolId: {
// label: "", label: "学校",
// rules: ruleRequired, rules: ruleRequired,
// width: "200px", width: "200px",
// search: true, search: true,
// type: "dropdown", type: "dropdown",
// add: true, // add: true, //
// edit: true, // edit: true, //
// setting: {} setting: {}
// }, },
// name: { name: {
// label: "[]", label: "名称[动态]",
// rules: ruleRequired, rules: ruleRequired,
// width: "100px", width: "100px",
// search: false, search: false,
// searchType: ConditionalType.Like, searchType: ConditionalType.Like,
// add: false, // add: false, //
// edit: false // edit: false //
// }, },
// level: { level: {
// label: "", label: "年级",
// rules: ruleRequired, rules: ruleRequired,
// width: "80px", width: "80px",
// type: "dropdown", type: "dropdown",
// search: true, search: true,
// setting: {}, setting: {},
// add: true, // add: true, //
// edit: true // edit: true //
// }, },
// year: { year: {
// label: "", label: "毕业届",
// width: "80px", width: "80px",
// rules: ruleRequired, rules: ruleRequired,
// search: true, search: true,
// setting: {}, setting: {},
// add: true, // add: true, //
// edit: true // edit: true //
// }, },
// createTime: { createTime: {
// label: "", label: "创建时间",
// type: "datetime", type: "datetime",
// search: true, search: true,
// add: false, // add: false, //
// edit: false // edit: false //
// } }
}, },
data: [], data: [],
pageData: { pageData: {
total: 0, total: 0
}, },
selectRows: [], selectRows: []
}; };
const showTable = ref(false); const showTable = ref(false);
onMounted(async () => { onMounted(async () => {
// //
tableData.column.level.setting.datasource = (await getenum("GradeLevelEnum")).data; tableData.column.level.setting.datasource = (
await getenum("GradeLevelEnum")
).data;
tableData.column.schoolId.setting.datasource = ( tableData.column.schoolId.setting.datasource = (
await SchoolApi.querycombo({ TextName: "Name", ValueName: "Id" }) await SchoolApi.querycombo({ TextName: "Name", ValueName: "Id" })

View File

@ -1,11 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
ConditionalType,
intTableData,
TableColumnSearch,
TableConfig,
} from "@/components/hTable/hTable";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
defineOptions({ defineOptions({
@ -17,7 +12,7 @@ function searchCallback(data) {
//let c = data.Conditions.find((s) => s.FieldName == "Pname"); //let c = data.Conditions.find((s) => s.FieldName == "Pname");
} }
const table = ref<{ initTable: (config: TableConfig) => void }>(null); const table = ref<{ initTable: (config: TableConfig) => void }>(null);
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: "usercenter/back/schools", apiUrl: "usercenter/back/schools",
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -57,32 +52,34 @@ const tableData: TableConfig = intTableData({
// //
id: { id: {
label: "编号", label: "编号",
search: true,
add: false, //
edit: false, //
width: "150px", width: "150px",
search: new TableColumnSearch(true),
}, },
name: { name: {
label: "学校名称", label: "学校名称",
width: "300px", width: "300px",
search: new TableColumnSearch(true), search: true,
edit: { searchType: ConditionalType.Like,
add: true, add: true, //
edit: true, edit: true, //
},
}, },
pname: { pname: {
label: "地区", label: "地区",
width: "300px", width: "300px",
search: false,
custom: (row) => `${row.pname}-${row.cname}-${row.rname}`, custom: (row) => `${row.pname}-${row.cname}-${row.rname}`,
add: false, //
edit: false, //
}, },
enable: { enable: {
label: "启用", label: "启用",
type: "switch", type: "switch",
search: true,
custom: (row) => (row.enable ? "启用" : "禁用"), custom: (row) => (row.enable ? "启用" : "禁用"),
search: new TableColumnSearch(true), add: true, //
edit: { edit: true, //
add: true,
edit: true,
},
}, },
}, },
data: [], data: [],
@ -90,7 +87,7 @@ const tableData: TableConfig = intTableData({
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
</script> </script>
<template> <template>

View File

@ -1,11 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import ahTable from "@/components/hTable/index.vue"; import ahTable from "@/components/hTable/index.vue";
import { import { ConditionalType, TableConfig } from "@/components/hTable/hTable";
ConditionalType,
intTableData,
TableColumnSearch,
TableConfig,
} from "@/components/hTable/hTable";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import { fa } from "element-plus/es/locales.mjs"; import { fa } from "element-plus/es/locales.mjs";
defineOptions({ defineOptions({
@ -20,7 +15,7 @@ function searchCallback(data) {
//let c = data.Conditions.find((s) => s.FieldName == "Pname"); //let c = data.Conditions.find((s) => s.FieldName == "Pname");
} }
const table = ref<{ initTable: (config: TableConfig) => void }>(null); const table = ref<{ initTable: (config: TableConfig) => void }>(null);
const tableData: TableConfig = intTableData({ const tableData: TableConfig = {
apiUrl: "usercenter/back/schools", apiUrl: "usercenter/back/schools",
selectColumn: false, // selectColumn: false, //
border: false, // border: false, //
@ -40,32 +35,34 @@ const tableData: TableConfig = intTableData({
// //
id: { id: {
label: "编号", label: "编号",
search: true,
add: false, //
edit: false, //
width: "150px", width: "150px",
search: new TableColumnSearch(true),
}, },
name: { name: {
label: "学校名称", label: "学校名称",
width: "300px", width: "300px",
search: new TableColumnSearch(true), search: true,
edit: { searchType: ConditionalType.Like,
add: true, add: true, //
edit: true, edit: true, //
},
}, },
pname: { pname: {
label: "地区", label: "地区",
width: "300px", width: "300px",
search: false,
custom: (row) => `${row.pname}-${row.cname}-${row.rname}`, custom: (row) => `${row.pname}-${row.cname}-${row.rname}`,
add: false, //
edit: false, //
}, },
enable: { enable: {
label: "启用", label: "启用",
type: "switch", type: "switch",
search: true,
custom: (row) => (row.enable ? "启用" : "禁用"), custom: (row) => (row.enable ? "启用" : "禁用"),
search: new TableColumnSearch(true), add: true, //
edit: { edit: true, //
add: true,
edit: true,
},
}, },
}, },
data: [], data: [],
@ -73,7 +70,7 @@ const tableData: TableConfig = intTableData({
total: 0, total: 0,
}, },
selectRows: [], selectRows: [],
}); };
</script> </script>
<template> <template>
<div> <div>

View File

@ -163,20 +163,20 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-card class="box-card"> <el-card class="box-card">
<div class="flex justify-between clearfixCss"> <div class="clearfix clearfixCss">
<span style="line-height: 32px; font-weight: 600" <span style="line-height: 32px; font-weight: 600"
>{{ userType == 1 ? "就读班级" : "已选职位" }}[{{ >{{ userType == 1 ? "就读班级" : "已选职位" }}[{{
selectPositions.length selectPositions.length
}}]</span }}]</span
> >
<el-button
<div> style="float: right"
<el-button @click="reload">重置</el-button> type="success"
<el-button type="success" @click="handleConfirm" :icon="Check" @click="handleConfirm"
:icon="Check"
>提交分配职位</el-button >提交分配职位</el-button
> >
</div> </div>
</div>
<div class="positionGap"> <div class="positionGap">
<el-tag <el-tag
v-for="(p, o) in selectPositions" v-for="(p, o) in selectPositions"
@ -433,9 +433,6 @@ const fetchPagedData = async () => {
} }
}; };
const reload = () => {
selectPositions.value = [];
};
const handleConfirm = () => { const handleConfirm = () => {
if (selectPositions.value.length === 0) { if (selectPositions.value.length === 0) {
ElMessage.warning("请选择要分配的职位"); ElMessage.warning("请选择要分配的职位");

View File

@ -0,0 +1,11 @@
<script setup lang="ts" name="Testxb">
import { ref } from "vue";
// defineOptions({
// name: "Testxb"
// });
let name = ref("nihao");
</script>
<template>
<div>测试菜单</div>
</template>