|
@@ -4,9 +4,8 @@
|
|
|
:title="tableTitle"
|
|
|
width="1200"
|
|
|
:before-close="handleClose"
|
|
|
+ :append-to-body="true"
|
|
|
>
|
|
|
- <div>{{ form }}</div>
|
|
|
- <div>{{ search }}</div>
|
|
|
<avue-crud
|
|
|
ref="crudRef"
|
|
|
v-model:search="search"
|
|
@@ -14,109 +13,219 @@
|
|
|
:data="data"
|
|
|
:option="option"
|
|
|
v-model:page="page"
|
|
|
+ @row-click="rowClick"
|
|
|
@row-save="createRow"
|
|
|
@row-update="updateRow"
|
|
|
@row-del="deleteRow"
|
|
|
+ @search-change="searchChange"
|
|
|
+ @search-reset="resetChange"
|
|
|
+ @size-change="dataList"
|
|
|
+ @current-change="dataList"
|
|
|
@selection-change="selectionChange"
|
|
|
- >
|
|
|
- <template #menu-left="{ size }">
|
|
|
- <el-button
|
|
|
- :disabled="toDeleteIds.length < 1"
|
|
|
- type="danger"
|
|
|
- icon="el-icon-delete"
|
|
|
- :size="size"
|
|
|
- @click="multipleDelete"
|
|
|
- >删除</el-button
|
|
|
- >
|
|
|
- </template>
|
|
|
- </avue-crud>
|
|
|
- <!-- <template #footer>
|
|
|
+ />
|
|
|
+
|
|
|
+ <template #footer>
|
|
|
<div class="dialog-footer">
|
|
|
- <el-button @click="dialogVisible = false">Cancel</el-button>
|
|
|
- <el-button type="primary" @click="dialogVisible = false">
|
|
|
- Confirm
|
|
|
- </el-button>
|
|
|
+ <el-button @click="handleClose">取消</el-button>
|
|
|
+ <el-button type="primary" @click="onSelected"> 确定 </el-button>
|
|
|
</div>
|
|
|
- </template> -->
|
|
|
+ </template>
|
|
|
</el-dialog>
|
|
|
</template>
|
|
|
<script setup>
|
|
|
import { ref, getCurrentInstance } from "vue";
|
|
|
import { useCrud } from "@/hooks/userCrud";
|
|
|
-import ButtonPermKeys from "@/common/configs/buttonPermission";
|
|
|
+import { tableConfig } from "./configs/tableConfig";
|
|
|
|
|
|
-import {
|
|
|
- productUrl,
|
|
|
- productOption,
|
|
|
- productUrl2,
|
|
|
- productOption2,
|
|
|
-} from "./configs/product";
|
|
|
+const props = defineProps({
|
|
|
+ tableTitle: {
|
|
|
+ default: "",
|
|
|
+ type: String,
|
|
|
+ },
|
|
|
+ tableType: {
|
|
|
+ default: "",
|
|
|
+ type: String,
|
|
|
+ },
|
|
|
+ multiple: {
|
|
|
+ default: false,
|
|
|
+ type: Boolean,
|
|
|
+ },
|
|
|
+ // 用于多选的返回值
|
|
|
+ multipleKey: {
|
|
|
+ default: "id",
|
|
|
+ type: String,
|
|
|
+ },
|
|
|
+ multipleRow: {
|
|
|
+ default: false,
|
|
|
+ type: Boolean,
|
|
|
+ },
|
|
|
+});
|
|
|
|
|
|
-import { useCommonStoreHook } from "@/store";
|
|
|
-const { isShowTable, tableType, tableTitle } = toRefs(useCommonStoreHook());
|
|
|
-// 传入一个url,后面不带/
|
|
|
-const { url, form, data, option, search, page, toDeleteIds, Methords, Utils } =
|
|
|
- useCrud({
|
|
|
- src: "/api/v1/plan/order",
|
|
|
+const isShowTable = ref(false);
|
|
|
+const startSelect = async (param) => {
|
|
|
+ if (param) {
|
|
|
+ commonConfig.value.params = param;
|
|
|
+ }
|
|
|
+ dataList();
|
|
|
+ isShowTable.value = true;
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * propName 要跟字典配置的key一致
|
|
|
+ * dictData 字典数据, 注意props的value和label
|
|
|
+ * */
|
|
|
+const refreshDictData = (propName, dictData, keyName = "value") => {
|
|
|
+ nextTick(() => {
|
|
|
+ if (dictData && dictData.length > 0 && crudRef.value) {
|
|
|
+ crudRef.value.updateDic(propName, dictData);
|
|
|
+ search.value[propName] = dictData[0][keyName];
|
|
|
+ }
|
|
|
});
|
|
|
-const { dataList, createRow, updateRow, deleteRow } = Methords; //增删改查
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * op 对象的字段要跟option实际字段一直 才能进行合并操作
|
|
|
+ */
|
|
|
+const mergeOption = (op) => {
|
|
|
+ for (const key of Object.keys(op)) {
|
|
|
+ option.value[key] = op[key];
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+// 传入一个url,后面不带/
|
|
|
+const {
|
|
|
+ url,
|
|
|
+ form,
|
|
|
+ data,
|
|
|
+ option,
|
|
|
+ search,
|
|
|
+ page,
|
|
|
+ toDeleteIds,
|
|
|
+ selectedRows,
|
|
|
+ Methords,
|
|
|
+ Utils,
|
|
|
+ commonConfig,
|
|
|
+} = useCrud({
|
|
|
+ src: tableConfig[props.tableType].url,
|
|
|
+ multipleSelectKey: props.multipleKey,
|
|
|
+});
|
|
|
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
|
|
|
+ Methords; //增删改查
|
|
|
const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
|
|
|
-const { checkBtnPerm } = Utils; //按钮权限等工具
|
|
|
-// checkBtnPerm(ButtonPermKeys.PLAN.BTNS.order_add) :permission="permission"
|
|
|
-// const permission = reactive({
|
|
|
-// delBtn: checkPerm(buttonPermission.PLAN.BTNS.order_del),
|
|
|
-// addBtn: checkPerm(buttonPermission.PLAN.BTNS.order_add),
|
|
|
-// editBtn: checkPerm(buttonPermission.PLAN.BTNS.order_edit),
|
|
|
-// menu: true,
|
|
|
-// });
|
|
|
|
|
|
const crudRef = ref(null); //crudRef.value 获取avue-crud对象
|
|
|
|
|
|
-// 设置表格列或者其他自定义的option
|
|
|
-// option.value = Object.assign(option.value, {
|
|
|
-// selection: true,
|
|
|
-// column: [
|
|
|
-// {
|
|
|
-// label: "产品",
|
|
|
-// prop: "materialCode",
|
|
|
-// search: true,
|
|
|
-// },
|
|
|
-// {
|
|
|
-// label: "年龄",
|
|
|
-// prop: "materialModel",
|
|
|
-// search: true,
|
|
|
-// },
|
|
|
-// {
|
|
|
-// label: "性别",
|
|
|
-// prop: "orderCode",
|
|
|
-// search: true,
|
|
|
-// },
|
|
|
-// {
|
|
|
-// label: "身高",
|
|
|
-// prop: "projectCode",
|
|
|
-// search: true,
|
|
|
-// },
|
|
|
-// ],
|
|
|
-// });
|
|
|
-// option.value = Object.assign(option.value, {
|
|
|
-// selection: true,
|
|
|
-// });
|
|
|
+const commonTableEmits = defineEmits(["selectedSure", "selectMultipleSure"]);
|
|
|
+
|
|
|
+const calculateColumnWidth = (column) => {
|
|
|
+ if (!column.label) {
|
|
|
+ return column.minWidth;
|
|
|
+ }
|
|
|
+ // 字宽度
|
|
|
+ const fontSize = 17;
|
|
|
+ let width = fontSize * (column.label.length + 2);
|
|
|
+ // 如果开启过滤
|
|
|
+ if (column.filters) {
|
|
|
+ width += 12;
|
|
|
+ }
|
|
|
+ // 如果开启排序
|
|
|
+ if (column.sortable) {
|
|
|
+ width += 24;
|
|
|
+ }
|
|
|
+ return width;
|
|
|
+};
|
|
|
|
|
|
+onMounted(() => {
|
|
|
+ if (props.tableType == "ROUTE_COMMON") {
|
|
|
+ search.value.enabled = "0";
|
|
|
+ }
|
|
|
+ url.value = tableConfig[props.tableType].url;
|
|
|
+ option.value = Object.assign(option.value, {
|
|
|
+ searchEnter: true,
|
|
|
+ menu: false,
|
|
|
+ highlightCurrentRow: true,
|
|
|
+ selection: props.multiple,
|
|
|
+ addBtn: false,
|
|
|
+ height: "500",
|
|
|
+ overHidden: true,
|
|
|
+ indexWidth: "120px",
|
|
|
+ searchLabelWidth: "120px",
|
|
|
+ column: tableConfig[props.tableType].column,
|
|
|
+ });
|
|
|
+ // 列处理
|
|
|
+ if (option.value.column) {
|
|
|
+ for (let col of option.value.column) {
|
|
|
+ col.minWidth = calculateColumnWidth(col);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // dataList();
|
|
|
+});
|
|
|
watch(
|
|
|
- () => tableType.value,
|
|
|
- (type) => {
|
|
|
- if (type == 1) {
|
|
|
- url.value = productUrl;
|
|
|
- option.value = Object.assign(option.value, productOption);
|
|
|
- } else {
|
|
|
- url.value = productUrl2;
|
|
|
- option.value = Object.assign(option.value, productOption2);
|
|
|
+ () => props.tableType,
|
|
|
+ () => {
|
|
|
+ url.value = tableConfig[props.tableType].url;
|
|
|
+ option.value = Object.assign(option.value, {
|
|
|
+ searchEnter: true,
|
|
|
+ menu: false,
|
|
|
+ highlightCurrentRow: true,
|
|
|
+ selection: props.multiple,
|
|
|
+ addBtn: false,
|
|
|
+ height: "500",
|
|
|
+ overHidden: true,
|
|
|
+ searchLabelWidth: "120px",
|
|
|
+ column: tableConfig[props.tableType].column,
|
|
|
+ });
|
|
|
+ // 列处理
|
|
|
+ if (option.value.column) {
|
|
|
+ for (let col of option.value.column) {
|
|
|
+ col.minWidth = calculateColumnWidth(col);
|
|
|
+ }
|
|
|
}
|
|
|
- dataList();
|
|
|
+ //dataList();
|
|
|
}
|
|
|
);
|
|
|
|
|
|
+const selectRowValue = ref({});
|
|
|
+const rowClick = (row) => {
|
|
|
+ selectRowValue.value = row;
|
|
|
+};
|
|
|
+
|
|
|
const handleClose = () => {
|
|
|
+ // 在这里可以清空打开的commonTable的搜索条件
|
|
|
+ search.value.bomMaterialCode = "";
|
|
|
+
|
|
|
+ crudRef.value.clearSelection();
|
|
|
+ toDeleteIds.value = [];
|
|
|
+ selectedRows.value = [];
|
|
|
+ selectRowValue.value = {};
|
|
|
isShowTable.value = false;
|
|
|
+
|
|
|
+ console.log(
|
|
|
+ "关闭弹窗",
|
|
|
+ toDeleteIds.value,
|
|
|
+ selectedRows.value,
|
|
|
+ selectRowValue.value
|
|
|
+ );
|
|
|
};
|
|
|
+
|
|
|
+const onSelected = () => {
|
|
|
+ if (props.multiple) {
|
|
|
+ if (toDeleteIds.value.length < 1) {
|
|
|
+ ElMessage.warning("未选择任何数据");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ commonTableEmits("selectMultipleSure", toDeleteIds.value);
|
|
|
+ } else {
|
|
|
+ if (props.multipleRow) {
|
|
|
+ console.log(selectedRows);
|
|
|
+ commonTableEmits("selectedSure", selectedRows.value);
|
|
|
+ } else {
|
|
|
+ commonTableEmits("selectedSure", selectRowValue.value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ handleClose();
|
|
|
+};
|
|
|
+
|
|
|
+defineExpose({ startSelect, refreshDictData, mergeOption });
|
|
|
</script>
|