olp-table 7.2.84 → 7.2.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle-report.html +2 -2
- package/olp-table.common.js +2 -2
- package/olp-table.umd.js +2 -2
- package/olp-table.umd.min.js +2 -2
- package/package.json +1 -1
package/olp-table.common.js
CHANGED
|
@@ -971,7 +971,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core
|
|
|
971
971
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
972
972
|
|
|
973
973
|
"use strict";
|
|
974
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/core-js/modules/es.iterator.filter.js\");\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_table_ol_form__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/table/ol-form */ \"./src/components/table/ol-form/index.vue\");\n/* harmony import */ var _element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @element-plus/icons-vue */ \"@element-plus/icons-vue\");\n/* harmony import */ var _element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _components_v_component_index_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/v-component/index.vue */ \"./src/components/v-component/index.vue\");\n/* harmony import */ var vue_codemirror__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-codemirror */ \"./node_modules/vue-codemirror/dist/vue-codemirror.esm.js\");\n/* harmony import */ var _codemirror_lang_javascript__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @codemirror/lang-javascript */ \"./node_modules/@codemirror/lang-javascript/dist/index.js\");\n/* harmony import */ var _codemirror_theme_one_dark__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @codemirror/theme-one-dark */ \"./node_modules/@codemirror/theme-one-dark/dist/index.js\");\n/* harmony import */ var _utils_message__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/utils/message */ \"./src/utils/message.js\");\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\n/* harmony import */ var _store_dictType__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/store/dictType */ \"./src/store/dictType.js\");\n/* harmony import */ var _store_dict__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/store/dict */ \"./src/store/dict.js\");\n/* harmony import */ var vxe_table__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! vxe-table */ \"vxe-table\");\n/* harmony import */ var vxe_table__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(vxe_table__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _utils_tree__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @/utils/tree */ \"./src/utils/tree.js\");\n/* harmony import */ var _api_dist__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @/api/dist */ \"./src/api/dist.js\");\n/* harmony import */ var _components_ol_table_select_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @/components/ol-table-select.vue */ \"./src/components/ol-table-select.vue\");\n/* harmony import */ var _components_ol_table_select_config_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @/components/ol-table-select-config.vue */ \"./src/components/ol-table-select-config.vue\");\n/* harmony import */ var _components_Icon__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @/components/Icon */ \"./src/components/Icon/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'index',\n props: {\n type: {}\n },\n setup(__props, {\n expose: __expose\n }) {\n const msg = (0,_utils_message__WEBPACK_IMPORTED_MODULE_10__.useMessage)(); // 消息弹窗\n const http = (0,vue__WEBPACK_IMPORTED_MODULE_7__.inject)('http');\n const dictType = (0,_store_dictType__WEBPACK_IMPORTED_MODULE_13__.storeDictType)();\n const props = __props;\n const customUrl = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(undefined);\n const vexGridRef = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(null);\n const vFormViewer = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(null);\n const dialogTableVisible = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(false);\n function setShow() {\n updateSort();\n }\n\n /**\r\n * 设置新增、编辑表单uuid和更新条件\r\n * @param key\r\n */\n function setUpdateKey(key) {\n if (form.updateKey != undefined && form.updateKey.toString.trim().length != 0) {\n form.updateKey = key;\n }\n }\n function showViewForm() {\n dialogTableVisible.value = true;\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n let data = {\n type: formType.value,\n theme: 't1',\n otherProp: otherProp,\n formData: {}\n };\n data.form = data.type == 0 ? baseOption.value : formJson.value;\n vFormViewer.value.init(data);\n });\n }\n const otherProp = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({\n beforeSave: '',\n afterSave: '',\n afterInit: '',\n beforeInit: '',\n createBy: '',\n updateBy: ''\n });\n // 基础表单\n const baseOption = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({\n submitBtn: false,\n emptyBtn: false,\n labelWidth: 125,\n comCommit: false,\n //如果为true,只提交form\n column: []\n });\n //编码设计\n const codeForm = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)();\n const copeFiled = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)();\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_14__.storeDict)();\n //表单类型\n const formType = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(0);\n //表单设计\n const formConfig = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(0);\n //快捷设计表单\n const designForm = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({\n span: 2\n });\n //快捷设计表格\n const gridOptions = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({\n border: true,\n resizable: true,\n showOverflow: true,\n size: 'mini',\n height: '420px',\n editConfig: {\n trigger: 'click',\n mode: 'cell'\n },\n rowConfig: {\n useKey: true\n },\n align: 'center',\n columns: [{\n title: '操作',\n width: 70,\n slots: {\n default: 'operate'\n }\n }, {\n type: 'checkbox',\n width: 40\n }, {\n type: \"expand\",\n width: 61,\n title: \"序号\",\n className: 'colExpand',\n slots: {\n content: 'content',\n default: 'seq'\n }\n }, {\n field: 'prop',\n minWidth: 130,\n editRender: {\n props: {\n clearable: true\n },\n events: {\n change: refreshForm\n },\n name: 'input'\n },\n title: \"字段名\"\n }, {\n field: 'title',\n width: 80,\n title: \"原标题\"\n }, {\n field: 'showName',\n width: 120,\n title: \"label\",\n editRender: {\n props: {\n clearable: true\n },\n events: {\n change: refreshForm\n },\n name: 'input'\n }\n }, {\n title: '必填',\n field: 'required',\n width: 60,\n params: {\n all: null\n },\n slots: {\n header: 'checkedBox_header',\n default: 'checkedBox_default'\n }\n }, {\n title: ' 不保存',\n field: 'tableField',\n width: 60,\n params: {\n all: null\n },\n slots: {\n header: 'checkedBox_header',\n default: 'checkedBox_default'\n }\n }, {\n title: '控件类型',\n field: 'selectDom',\n width: 100,\n editRender: {\n props: {\n clearable: true,\n filterable: true\n },\n name: '$select',\n events: {\n change: refreshForm\n },\n options: dict.val('select_dom')\n }\n }, {\n title: '数据字典',\n field: 'dictCode',\n allowCreate: true,\n width: 120,\n filterable: true,\n //数据字典属性的配置对象\n props: {\n label: 'dictLabel',\n value: 'dictValue'\n },\n editRender: {\n props: {\n clearable: true,\n filterable: true\n },\n name: '$select',\n events: {\n change: refreshForm\n },\n options: dictType.val()\n }\n }, {\n title: '更新回调',\n field: 'change',\n width: 100,\n slots: {\n default: 'change'\n }\n }],\n data: []\n });\n //展开行表单\n const expandForm = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({\n submitBtn: false,\n emptyBtn: false,\n span: 8,\n column: [{\n label: '禁用',\n prop: 'disabled',\n type: 'switch',\n value: false,\n dicData: [{\n label: '否',\n value: false\n }, {\n label: '是',\n value: true\n }]\n }, {\n label: '隐藏',\n prop: 'display',\n type: 'switch',\n value: true,\n dicData: [{\n label: '否',\n value: true\n }, {\n label: '是',\n value: false\n }]\n }, {\n label: '多选',\n prop: 'multiple',\n type: 'switch',\n value: false,\n dicData: [{\n label: '否',\n value: false\n }, {\n label: '是',\n value: true\n }]\n }, {\n label: '标题宽度',\n prop: 'labelWidth'\n }, {\n label: '默认值',\n prop: 'value'\n }, {\n label: '输入框提示',\n prop: 'placeholder'\n }, {\n label: '数据字典表',\n prop: 'dictTable'\n }, {\n label: '字典dictUrl',\n prop: 'dictUrl'\n }, {\n label: '其他属性',\n prop: 'attrs',\n slots: {\n default: 'attrs'\n }\n }]\n });\n //自定义表单值\n const formJson = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({});\n const formData = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({});\n const formKey = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(0);\n const optionData = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({});\n const vFormRef = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(null);\n const customForm = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(\"\");\n const copeFiledMethod = value => {\n let checkboxRecords = vexGridRef.value.getCheckboxRecords();\n if (checkboxRecords.length != 0) {\n let filed = \"\";\n for (let {\n prop\n } of checkboxRecords) {\n if (filed.length != 0) {\n filed += \",\";\n }\n filed += prop;\n }\n if (value == 1) {\n filed = \"hideColumn('\" + filed + \"');\";\n } else if (value == 2) {\n filed = \"showColumn('\" + filed + \"');\";\n }\n navigator.clipboard.writeText(filed).then(() => {\n msg.success(\"复制成功!\" + filed);\n }).catch(err => {\n msg.error(\"复制失败!\" + filed);\n });\n }\n };\n //表头全选框更新\n const headerClick = column => {\n gridOptions.value.data.forEach(item => {\n if (column.params.all) {\n item.rules = [{\n required: true,\n message: '请输入' + item.title,\n trigger: 'blur'\n }];\n item[column.field] = '1';\n } else {\n item[column.field] = '0';\n item.rules = null;\n }\n });\n refreshForm();\n };\n\n //获取数据\n const setData = data => {\n if (!data) {\n return;\n }\n formType.value = parseInt(data.formMain.designer);\n for (let key of Object.keys(form)) {\n form[key] = data.formMain[key];\n }\n if (form.otherProp && form.otherProp.toString().trim()) {\n try {\n let otherPropJson = JSON.parse(form.otherProp);\n for (let key of Object.keys(otherProp)) {\n otherProp[key] = otherPropJson[key];\n }\n } catch (e) {\n console.error(e);\n }\n }\n customForm.value = data.formMain.customForm;\n //基础表单\n //JSON字符串\n if (data.formJson.optionJson) {\n codeForm.value = data.formJson.optionJson;\n codeToData();\n }\n if (data.formJson.customJson) {\n //自定义表单\n formJson.value = JSON.parse(data.formJson.customJson);\n }\n };\n function getColumn(item) {\n let obj = {\n prop: item.field,\n title: item.title || item.label,\n sort: gridOptions.value.data ? gridOptions.value.data.length : 0,\n //为空默认文本框\n selectDom: item.selectDom ? item.selectDom : 1,\n dictCode: item.dictCode,\n form: {\n dictTable: item.dictTable\n }\n };\n return obj;\n }\n\n //列配置新增多选更新\n const updateData = (row, column) => {\n if (row[column.field] == '1') {\n for (const item of gridOptions.value.data) {\n if (item.prop == row.field) return;\n }\n let tableObj = getColumn(row);\n gridOptions.value.data.push(tableObj);\n } else {\n gridOptions.value.data = gridOptions.value.data.filter(item => item.prop != row.field);\n }\n reloadData();\n refreshForm();\n };\n function parseJson(column) {\n let attrs = column.attrs;\n if (attrs) {\n try {\n attrs = JSON.parse(attrs);\n for (let key of Object.keys(attrs)) {\n column[key] = attrs;\n }\n } catch (e) {\n console.error(\"解析attrs异常\", attrs);\n }\n }\n }\n function reloadData(data) {\n if (data) {\n gridOptions.value.data = data;\n }\n if (vexGridRef.value) {\n vexGridRef.value.reloadData(gridOptions.value.data);\n }\n }\n\n //列配置新增全选与全不选\n const setAll = ({\n list,\n isAll\n }) => {\n let data = [];\n if (isAll) {\n for (let item of list) {\n data.push(getColumn(item));\n }\n }\n reloadData(data);\n refreshForm();\n };\n\n //基础表单 > 快捷设计表单更新\n const designFormChange = () => {\n //行数转换为尺寸\n baseOption.value.span = parseInt(24 / designForm.value.span);\n //JSON格式化\n codeForm.value = jsonFormat(baseOption.value);\n updateSort();\n };\n\n //控件类型更新\n const dictChange = ({\n row\n }) => {\n if (row.selectDom === '22') {\n //如果是表格选择器,则展开行,因为一定要配置其他属性,所以需要展开行\n if (row.form.attrs == null || row.form.attrs === '') {\n row.form.attrs = '{\\n' + ' \"olTableSelect\":{\\n' + ' \"uuid\":\"1901841070608990208\",\\n' + ' \"key\":\"id\",\\n' +\n //数据库要存的值,如:外键ID或某个编码\n ' \"label\":\"name\",\\n' +\n //选中数据后回显的数据\n ' \"labelIsAppendCode\":false,\\n' +\n //默认,可不填或不该\n ' \"otherResult\":\"目标字段1:源字段1,目标字段2:源字段2,目标字段3:源字段3\"\\n' +\n //需要额外字段数据格式配置:\"目标字段1:源字段1,目标字段2:源字段2\n ' }\\n' + '}';\n }\n vexGridRef.value.setRowExpand([row], true); //展开行\n }\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n baseOption.value.column.forEach(item => {\n if (item.prop == row.prop) {\n item.type = getFormType(row); //控件类型\n if (item.type === 'month') {\n item.format = 'YYYY-MM';\n item.valueFormat = 'YYYY-MM';\n }\n if (row.selectDom == 8) {\n item.multiple = true;\n }\n codeForm.value = jsonFormat(baseOption.value);\n return;\n }\n });\n });\n };\n let update = true;\n function refreshForm() {\n if (update != true) {\n setTimeout(() => {\n refreshForm();\n }, 200);\n }\n update = false;\n let data = JSON.parse(JSON.stringify(gridOptions.value.data));\n let columns = [];\n let index = 1;\n for (let d of data) {\n d.sort = index;\n let column = getCodeColumn(d);\n columns.push(column);\n index++;\n }\n columns.sort((a, b) => {\n return a.sort - b.sort;\n });\n setCodeForm(columns);\n setBaseOption(columns);\n update = true;\n }\n function setDictCode(column) {\n if (column.selectDom != 1 && (column.dictCode || column.dictTable || column.dictUrl)) {\n getDicData(column);\n }\n }\n function codeToData(alter) {\n try {\n getFormatter();\n let value = JSON.parse(codeForm.value);\n setSort(value);\n codeForm.value = jsonFormat(value);\n //更新快捷设计表格的数据\n setTableData(value);\n if (!value.labelWidth) value.labelWidth = 125;\n baseOption.value = value;\n setBaseOption(value.column);\n value.span = value.span ? value.span : 12;\n //计算表单每行个数\n designForm.value.span = parseInt(24 / value.span);\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n refreshForm();\n });\n if (alter) {\n msg.success(\"生成成功!\");\n }\n } catch (e) {\n console.error(e);\n msg.error('生成失败,请检查对象格式是否正确' + e);\n }\n }\n function setCodeForm(columns) {\n let option = JSON.parse(JSON.stringify(baseOption.value));\n option.column = JSON.parse(JSON.stringify(columns));\n codeForm.value = jsonFormat(option);\n }\n function setEvents(column) {\n for (let event of events) {\n if (column[event] != undefined && column[event] != '') {\n try {\n let e = replaceDollarBraces(column[event]);\n column[event] = eval(\"(params)=>{\" + e + \"}\");\n } catch (e) {\n console.error(e);\n }\n } else {\n delete column[event];\n }\n }\n }\n function replaceDollarBraces(str) {\n return str.replace(/\\$\\{?([^{}]+)\\}?/g, function (match, innerContent) {\n return innerContent ? `'${innerContent}'` : match;\n });\n }\n function setBaseOption(columns) {\n columns = JSON.parse(JSON.stringify(columns));\n for (let column of columns) {\n try {\n parseJson(column);\n setEvents(column);\n setDictCode(column);\n } catch (e) {\n console.error(e);\n }\n }\n baseOption.value.column = columns;\n }\n let events = ['change'];\n function getFormatter() {\n //正则表达式替换字符串的值\n let v = codeForm.value.replace(/,}/gi, \"}\").replace(/,]/gi, \"]\");\n codeForm.value = JSON.stringify(JSON.parse(v), null, 4);\n }\n function setSort(value) {\n value.column.sort((a, b) => {\n return a.sort - b.sort;\n });\n for (let i = 0; i < value.column.length; i++) {\n value.column.sort = i + 1;\n }\n }\n function getCodeColumn(row) {\n let columnObj = {};\n for (let column of gridOptions.value.columns) {\n if (column.field !== undefined && row[column.field] !== undefined && row[column.field] !== '' && row[column.field] !== null) {\n columnObj[column.field] = row[column.field];\n }\n }\n for (let column of expandForm.value.column) {\n if (column.prop !== undefined && row.form[column.prop] !== undefined && row.form[column.prop] !== '' && row.form[column.prop] !== null) {\n columnObj[column.prop] = row.form[column.prop];\n }\n }\n columnObj.label = columnObj.showName ? columnObj.showName : columnObj.title;\n if (columnObj.required == '1') {\n columnObj.rules = [{\n required: true,\n message: '请输入' + row.title,\n trigger: 'blur'\n }];\n }\n if (columnObj.required == '0') {\n delete columnObj.rules;\n delete columnObj.required;\n }\n if (columnObj != 1) {\n columnObj.type = getFormType(row);\n if (columnObj.type === 'month') {\n columnObj.format = 'YYYY-MM';\n columnObj.valueFormat = 'YYYY-MM';\n }\n if (row.selectDom == 8) {\n columnObj.multiple = true;\n }\n }\n return columnObj;\n }\n function getTableRow(data) {\n let obj = JSON.parse(JSON.stringify(data));\n obj.form = {};\n for (let column of gridOptions.value.columns) {\n if (column.field !== undefined && data[column.field] !== undefined && data[column.field].toString().trim() !== '') {\n obj[column.field] = data[column.field];\n }\n }\n for (let column of expandForm.value.column) {\n if (column.prop !== undefined && data[column.prop] !== undefined && data[column.prop].toString().trim() !== '') {\n obj.form[column.prop] = data[column.prop];\n }\n }\n for (let event of events) {\n if (obj[event] != undefined && !(obj[event] instanceof Function)) {\n obj[event] = obj[event].toString();\n }\n }\n if (data.label) {\n obj.showName = data.label;\n if (!obj.title) {\n obj.title = data.label;\n }\n }\n if (data.label) {\n obj.showName = data.label;\n obj.title = data.label;\n }\n delete obj.type;\n return obj;\n }\n\n //编码设计生成后更新快捷设计表格数据\n const setTableData = value => {\n let datas = [];\n for (let column of value.column) {\n let data = getTableRow(column);\n datas.push(data);\n }\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n gridOptions.value.data = datas;\n });\n };\n function setDicData(column) {\n baseOption.value.column.forEach(item => {\n if (item.prop == column.prop) {\n item.dicData = column.dicData;\n return;\n }\n });\n }\n const setDictUrl = column => {\n let dictUrl = column.dictUrl.split(\",\");\n let url;\n let label = 'label';\n let value = 'value';\n let parentId = 'parentId';\n // get,url,label,value,parent_id\n let doGet = true;\n if (dictUrl.length > 1) {\n if (dictUrl[0].toString().toLowerCase() == 'post') {\n doGet = false;\n }\n url = dictUrl[1];\n label = dictUrl[2];\n value = dictUrl[3];\n parentId = dictUrl[4];\n } else {\n url = dictUrl[0];\n }\n if (doGet) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.get)(http, url).then(data => {\n column.dicData.length = 0;\n if (column.type == 'tree') {\n for (let da of data) {\n da['label'] = da[label];\n da['value'] = da[value];\n }\n column.dicData = (0,_utils_tree__WEBPACK_IMPORTED_MODULE_16__.handleTree)(data, value, parentId);\n } else {\n data.forEach(d => {\n column.dicData.push(d);\n });\n }\n });\n } else {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.post)(http, column.dictUrl, false, false).then(({\n data\n }) => {\n column.dicData.length = 0;\n if (column.type == 'tree') {\n for (let da of data) {\n da['label'] = da[label];\n da['value'] = da[value];\n }\n column.dicData = (0,_utils_tree__WEBPACK_IMPORTED_MODULE_16__.handleTree)(data, value, parentId);\n } else {\n data.forEach(da => {\n da['label'] = da[label];\n da['value'] = da[value];\n column.dicData.push(da);\n });\n }\n });\n }\n };\n //获取字典\n const getDicData = column => {\n let code = column.dictCode;\n if (code == \"\" || !code) {\n delete column.dicData;\n } else if (column.dictTable) {\n getParameter(column);\n } else if (column.dictUrl) {\n setDictUrl(column);\n } else {\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_14__.storeDict)();\n column.dicData = dict.val(column.dictCode);\n setDicData(column);\n }\n };\n function getParameter(column) {\n let params = {};\n let dictTable = JSON.parse(JSON.stringify(column.dictTable));\n if (dictTable instanceof Object) {\n params = dictTable;\n } else {\n dictTable = column.dictTable.split(\",\");\n params[\"dbName\"] = dictTable[0];\n params[\"tableName\"] = dictTable[1];\n params[\"label\"] = dictTable[2];\n params[\"value\"] = dictTable[3];\n if (dictTable[4]) {\n params[\"parentValue\"] = dictTable[4];\n }\n }\n (0,_api_dist__WEBPACK_IMPORTED_MODULE_17__.initDictTable)(http, params).then(data => {\n column.dicData.length = 0;\n for (let d of data) {\n d.label = d.dictLabel;\n d.value = d.dictValue;\n }\n if (params[\"parentValue\"]) {\n data = (0,_utils_tree__WEBPACK_IMPORTED_MODULE_16__.handleTree)(data, 'value', 'parentValue');\n column.dicData.push(data);\n } else {\n for (let d of data) {\n d.label = d.dictLabel;\n d.value = d.dictValue;\n column.dicData.push(d);\n }\n }\n setDicData(column);\n });\n }\n\n //JSON格式化\n const jsonFormat = val => {\n return JSON.stringify(JSON.parse(JSON.stringify(val)), null, 4);\n };\n\n //控件类型转换\n const getFormType = row => {\n let val = row.selectDom;\n if (val != '' || val != undefined || val) {\n let type;\n let map = {\n input: '1',\n select: '2',\n datetime: '3',\n time: '30',\n radio: '4',\n checkbox: '5',\n date: '6',\n month: '11',\n number: '7',\n tree: '15',\n textarea: '10'\n };\n if (isNaN(val)) {\n //不是数字,通过健找值\n type = map[val];\n } else {\n if (val == 8) {\n type = \"select\";\n } else {\n //是数字,通过值找健\n // 使用 Object.values() 获取对象的所有值\n const arr = Object.values(map);\n // 使用 Array.prototype.indexOf() 查找指定值在数组中的索引位置\n const index = arr.indexOf(val);\n // 使用 Object.keys()[index] 获取对应索引位置的键名\n type = Object.keys(map)[index];\n }\n if (type == null) {\n type = 'input';\n } else if (['select', 'checkbox', 'radio', 'tree'].indexOf(type) != -1) {\n getDicData(row);\n }\n }\n return type;\n }\n };\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.onMounted)(() => {\n updateSort();\n });\n function addColumn() {\n gridOptions.value.data.push({\n sort: gridOptions.value.data.length,\n prop: \"\",\n title: \"\",\n showName: \"\",\n selectDom: \"1\",\n label: \"\",\n type: \"input\",\n form: {}\n });\n refreshForm();\n }\n\n //表格拖动更新\n const updateSort = () => {\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n if (!vexGridRef.value) {\n return;\n }\n //el绑定元素需要找到vxe的DOM下的tbody元素\n sortablejs__WEBPACK_IMPORTED_MODULE_12__[\"default\"].create(vexGridRef.value.$el.querySelector('.body--wrapper>.vxe-table--body tbody'), {\n animation: 130,\n //拖拽动画过渡时间\n handle: '.vxe-icon-sort',\n // 结束拖拽\n onEnd: function (/**Event*/{\n oldIndex,\n newIndex\n }) {\n const list = JSON.parse(JSON.stringify(gridOptions.value.data)); //保存旧数据\n const targetRow = list.splice(oldIndex, 1)[0]; //保存移动的元素并删除原列表中移动的元素\n list.splice(newIndex, 0, targetRow); //插入到目标新索引中\n const newsArr = JSON.parse(JSON.stringify(list)); //重新赋值数组\n //将新表格数据重新排序\n for (let i = 0; i < newsArr.length; i++) {\n newsArr[i].sort = i;\n }\n gridOptions.value.data = newsArr;\n //把表单的排序号和表格的排序号保持一致\n newsArr.forEach(tableItem => {\n baseOption.value.column.forEach(formItem => {\n if (tableItem.prop == formItem.prop) {\n formItem.sort = tableItem.sort;\n }\n });\n });\n //将表单重新排序\n baseOption.value.column.sort((a, b) => {\n return a.sort - b.sort;\n });\n codeForm.value = jsonFormat(baseOption.value);\n }\n });\n });\n };\n const form = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({\n updateKey: '',\n createBy: '',\n updateBy: '',\n saveUrl: '',\n title: '',\n otherProp: {},\n requestType: 'post',\n formType: props.type\n });\n const state = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({\n extensions: [(0,_codemirror_lang_javascript__WEBPACK_IMPORTED_MODULE_21__.javascript)(), _codemirror_theme_one_dark__WEBPACK_IMPORTED_MODULE_22__.oneDark],\n values: null,\n err: false,\n baseForm: {},\n baseFormRender: {}\n });\n const formMap = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({});\n\n // 更换表单\n const onChangeForm = value => {\n if (value) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.get)(http, \"/online/formDesigner/queryById\", {\n id: value\n }).then(data => {\n formJson.value = JSON.parse(data.formJson);\n formKey.value++;\n });\n }\n };\n const getForm = () => {\n form.otherProp = JSON.stringify(otherProp);\n return (0,vue__WEBPACK_IMPORTED_MODULE_7__.markRaw)(form);\n };\n // 获取新增表单配置数据\n const getData = () => {\n if (formType.value == 0 && gridOptions.value.data.length == 0) {\n return undefined;\n }\n refreshForm();\n let obj = {\n vexTable: gridOptions.value,\n baseForm: baseOption.value,\n codeForm: codeForm.value,\n designer: formType.value,\n customJson: formJson.value,\n customForm: customForm.value\n };\n return obj;\n };\n /**\r\n * 右边字段配置删除行数据\r\n * @param row\r\n * @returns {Promise<void>}\r\n */\n const removeRowEvent = async row => {\n const type = await vxe_table__WEBPACK_IMPORTED_MODULE_15___default().modal.confirm('您确定要删除该数据?');\n const $grid = vexGridRef.value;\n if ($grid && type === 'confirm') {\n await $grid.remove(row);\n gridOptions.value.data = gridOptions.value.data.filter(item => item._X_ROW_KEY != row._X_ROW_KEY);\n removeColumnEvent(row);\n }\n };\n /**\r\n * 删除表单属性(快捷设计属性)\r\n * @param row\r\n */\n const removeColumnEvent = row => {\n baseOption.value.column = baseOption.value.column.filter(item => item.prop != row.prop);\n codeForm.value = jsonFormat(baseOption.value);\n };\n\n /**\r\n * 表格选择器回调函数\r\n * @param data\r\n */\n function olTableSelectChange(slotName, data) {\n console.info('插槽名称', slotName);\n console.info('表格回传的数据', data);\n }\n\n // 动态获取需要渲染的插槽名称列表\n const dynamicSlotsTable = (0,vue__WEBPACK_IMPORTED_MODULE_7__.computed)(() => {\n const result = baseOption.value.column.filter(item => item.selectDom === '22' || item.selectDom === '21') // 筛选出需要动态插槽的字段(表单选择)\n .map(item => {\n let slotObj = {\n slotName: item.prop,\n type: item.selectDom,\n config: item.attrs != null ? JSON.parse(item.attrs).olTableSelect : {}\n };\n return slotObj;\n }); // 获取字段名作为插槽名\n return result;\n });\n\n // 对外暴露\n __expose({\n setData,\n updateData,\n setAll,\n getData,\n setShow,\n getForm,\n setUpdateKey\n });\n const __returned__ = {\n msg,\n http,\n dictType,\n props,\n customUrl,\n vexGridRef,\n vFormViewer,\n dialogTableVisible,\n setShow,\n setUpdateKey,\n showViewForm,\n otherProp,\n baseOption,\n codeForm,\n copeFiled,\n dict,\n formType,\n formConfig,\n designForm,\n gridOptions,\n expandForm,\n formJson,\n formData,\n formKey,\n optionData,\n vFormRef,\n customForm,\n copeFiledMethod,\n headerClick,\n setData,\n getColumn,\n updateData,\n parseJson,\n reloadData,\n setAll,\n designFormChange,\n dictChange,\n get update() {\n return update;\n },\n set update(v) {\n update = v;\n },\n refreshForm,\n setDictCode,\n codeToData,\n setCodeForm,\n setEvents,\n replaceDollarBraces,\n setBaseOption,\n get events() {\n return events;\n },\n set events(v) {\n events = v;\n },\n getFormatter,\n setSort,\n getCodeColumn,\n getTableRow,\n setTableData,\n setDicData,\n setDictUrl,\n getDicData,\n getParameter,\n jsonFormat,\n getFormType,\n addColumn,\n updateSort,\n form,\n state,\n formMap,\n onChangeForm,\n getForm,\n getData,\n removeRowEvent,\n removeColumnEvent,\n olTableSelectChange,\n dynamicSlotsTable,\n get vForm() {\n return _components_table_ol_form__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n },\n get Delete() {\n return _element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6__.Delete;\n },\n get Search() {\n return _element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6__.Search;\n },\n reactive: vue__WEBPACK_IMPORTED_MODULE_7__.reactive,\n ref: vue__WEBPACK_IMPORTED_MODULE_7__.ref,\n nextTick: vue__WEBPACK_IMPORTED_MODULE_7__.nextTick,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_7__.onMounted,\n inject: vue__WEBPACK_IMPORTED_MODULE_7__.inject,\n markRaw: vue__WEBPACK_IMPORTED_MODULE_7__.markRaw,\n computed: vue__WEBPACK_IMPORTED_MODULE_7__.computed,\n vComponent: _components_v_component_index_vue__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n get Codemirror() {\n return vue_codemirror__WEBPACK_IMPORTED_MODULE_9__.Codemirror;\n },\n get javascript() {\n return _codemirror_lang_javascript__WEBPACK_IMPORTED_MODULE_21__.javascript;\n },\n get oneDark() {\n return _codemirror_theme_one_dark__WEBPACK_IMPORTED_MODULE_22__.oneDark;\n },\n get useMessage() {\n return _utils_message__WEBPACK_IMPORTED_MODULE_10__.useMessage;\n },\n get get() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.get;\n },\n get post() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.post;\n },\n get Sortable() {\n return sortablejs__WEBPACK_IMPORTED_MODULE_12__[\"default\"];\n },\n get storeDictType() {\n return _store_dictType__WEBPACK_IMPORTED_MODULE_13__.storeDictType;\n },\n get storeDict() {\n return _store_dict__WEBPACK_IMPORTED_MODULE_14__.storeDict;\n },\n get VXETable() {\n return (vxe_table__WEBPACK_IMPORTED_MODULE_15___default());\n },\n get handleTree() {\n return _utils_tree__WEBPACK_IMPORTED_MODULE_16__.handleTree;\n },\n get initDictTable() {\n return _api_dist__WEBPACK_IMPORTED_MODULE_17__.initDictTable;\n },\n OlTableSelect: _components_ol_table_select_vue__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n OlTableSelectConfig: _components_ol_table_select_config_vue__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n get IconSelect() {\n return _components_Icon__WEBPACK_IMPORTED_MODULE_20__.IconSelect;\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://olp-table/./src/views/table/add-or-edit/config/form-config/index.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
|
|
974
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/core-js/modules/es.iterator.filter.js\");\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_table_ol_form__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/table/ol-form */ \"./src/components/table/ol-form/index.vue\");\n/* harmony import */ var _element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @element-plus/icons-vue */ \"@element-plus/icons-vue\");\n/* harmony import */ var _element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue */ \"vue\");\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _components_v_component_index_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/v-component/index.vue */ \"./src/components/v-component/index.vue\");\n/* harmony import */ var vue_codemirror__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-codemirror */ \"./node_modules/vue-codemirror/dist/vue-codemirror.esm.js\");\n/* harmony import */ var _codemirror_lang_javascript__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @codemirror/lang-javascript */ \"./node_modules/@codemirror/lang-javascript/dist/index.js\");\n/* harmony import */ var _codemirror_theme_one_dark__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @codemirror/theme-one-dark */ \"./node_modules/@codemirror/theme-one-dark/dist/index.js\");\n/* harmony import */ var _utils_message__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/utils/message */ \"./src/utils/message.js\");\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var sortablejs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! sortablejs */ \"./node_modules/sortablejs/modular/sortable.esm.js\");\n/* harmony import */ var _store_dictType__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/store/dictType */ \"./src/store/dictType.js\");\n/* harmony import */ var _store_dict__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/store/dict */ \"./src/store/dict.js\");\n/* harmony import */ var vxe_table__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! vxe-table */ \"vxe-table\");\n/* harmony import */ var vxe_table__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(vxe_table__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _utils_tree__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @/utils/tree */ \"./src/utils/tree.js\");\n/* harmony import */ var _api_dist__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @/api/dist */ \"./src/api/dist.js\");\n/* harmony import */ var _components_ol_table_select_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @/components/ol-table-select.vue */ \"./src/components/ol-table-select.vue\");\n/* harmony import */ var _components_ol_table_select_config_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @/components/ol-table-select-config.vue */ \"./src/components/ol-table-select-config.vue\");\n/* harmony import */ var _components_Icon__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @/components/Icon */ \"./src/components/Icon/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n __name: 'index',\n props: {\n type: {}\n },\n setup(__props, {\n expose: __expose\n }) {\n const msg = (0,_utils_message__WEBPACK_IMPORTED_MODULE_10__.useMessage)(); // 消息弹窗\n const http = (0,vue__WEBPACK_IMPORTED_MODULE_7__.inject)('http');\n const dictType = (0,_store_dictType__WEBPACK_IMPORTED_MODULE_13__.storeDictType)();\n const props = __props;\n const customUrl = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(undefined);\n const vexGridRef = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(null);\n const vFormViewer = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(null);\n const dialogTableVisible = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(false);\n function setShow() {\n updateSort();\n }\n\n /**\r\n * 设置新增、编辑表单uuid和更新条件\r\n * @param key\r\n */\n function setUpdateKey(key) {\n if (form.updateKey != undefined && form.updateKey.toString.trim().length != 0) {\n form.updateKey = key;\n }\n }\n function showViewForm() {\n dialogTableVisible.value = true;\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n let data = {\n type: formType.value,\n theme: 't1',\n otherProp: otherProp,\n formData: {}\n };\n data.form = data.type == 0 ? baseOption.value : formJson.value;\n vFormViewer.value.init(data);\n });\n }\n const otherProp = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({\n beforeSave: '',\n afterSave: '',\n afterInit: '',\n beforeInit: '',\n createBy: '',\n updateBy: ''\n });\n // 基础表单\n const baseOption = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({\n submitBtn: false,\n emptyBtn: false,\n labelWidth: 125,\n comCommit: false,\n //如果为true,只提交form\n column: []\n });\n //编码设计\n const codeForm = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)();\n const copeFiled = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)();\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_14__.storeDict)();\n //表单类型\n const formType = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(0);\n //表单设计\n const formConfig = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(0);\n //快捷设计表单\n const designForm = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({\n span: 2\n });\n //快捷设计表格\n const gridOptions = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({\n border: true,\n resizable: true,\n showOverflow: true,\n size: 'mini',\n height: '420px',\n editConfig: {\n trigger: 'click',\n mode: 'cell'\n },\n rowConfig: {\n useKey: true\n },\n align: 'center',\n columns: [{\n title: '操作',\n width: 70,\n slots: {\n default: 'operate'\n }\n }, {\n type: 'checkbox',\n width: 40\n }, {\n type: \"expand\",\n width: 61,\n title: \"序号\",\n className: 'colExpand',\n slots: {\n content: 'content',\n default: 'seq'\n }\n }, {\n field: 'prop',\n minWidth: 130,\n editRender: {\n props: {\n clearable: true\n },\n events: {\n change: refreshForm\n },\n name: 'input'\n },\n title: \"字段名\"\n }, {\n field: 'title',\n width: 80,\n title: \"原标题\"\n }, {\n field: 'showName',\n width: 120,\n title: \"label\",\n editRender: {\n props: {\n clearable: true\n },\n events: {\n change: refreshForm\n },\n name: 'input'\n }\n }, {\n title: '必填',\n field: 'required',\n width: 60,\n params: {\n all: null\n },\n slots: {\n header: 'checkedBox_header',\n default: 'checkedBox_default'\n }\n }, {\n title: ' 不保存',\n field: 'tableField',\n width: 60,\n params: {\n all: null\n },\n slots: {\n header: 'checkedBox_header',\n default: 'checkedBox_default'\n }\n }, {\n title: '控件类型',\n field: 'selectDom',\n width: 100,\n editRender: {\n props: {\n clearable: true,\n filterable: true\n },\n name: '$select',\n events: {\n change: refreshForm\n },\n options: dict.val('select_dom')\n }\n }, {\n title: '数据字典',\n field: 'dictCode',\n allowCreate: true,\n width: 120,\n filterable: true,\n //数据字典属性的配置对象\n props: {\n label: 'dictLabel',\n value: 'dictValue'\n },\n editRender: {\n props: {\n clearable: true,\n filterable: true\n },\n name: '$select',\n events: {\n change: refreshForm\n },\n options: dictType.val()\n }\n }, {\n title: '更新回调',\n field: 'change',\n width: 100,\n slots: {\n default: 'change'\n }\n }],\n data: []\n });\n //展开行表单\n const expandForm = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({\n submitBtn: false,\n emptyBtn: false,\n span: 8,\n column: [{\n label: '禁用',\n prop: 'disabled',\n type: 'switch',\n value: false,\n dicData: [{\n label: '否',\n value: false\n }, {\n label: '是',\n value: true\n }]\n }, {\n label: '隐藏',\n prop: 'display',\n type: 'switch',\n value: true,\n dicData: [{\n label: '否',\n value: true\n }, {\n label: '是',\n value: false\n }]\n }, {\n label: '多选',\n prop: 'multiple',\n type: 'switch',\n value: false,\n dicData: [{\n label: '否',\n value: false\n }, {\n label: '是',\n value: true\n }]\n }, {\n label: '标题宽度',\n prop: 'labelWidth'\n }, {\n label: '默认值',\n prop: 'value'\n }, {\n label: '输入框提示',\n prop: 'placeholder'\n }, {\n label: '数据字典表',\n prop: 'dictTable'\n }, {\n label: '字典dictUrl',\n prop: 'dictUrl'\n }, {\n label: '其他属性',\n prop: 'attrs',\n slots: {\n default: 'attrs'\n }\n }]\n });\n //自定义表单值\n const formJson = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)({});\n const formData = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({});\n const formKey = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(0);\n const optionData = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({});\n const vFormRef = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(null);\n const customForm = (0,vue__WEBPACK_IMPORTED_MODULE_7__.ref)(\"\");\n const copeFiledMethod = value => {\n let checkboxRecords = vexGridRef.value.getCheckboxRecords();\n if (checkboxRecords.length != 0) {\n let filed = \"\";\n for (let {\n prop\n } of checkboxRecords) {\n if (filed.length != 0) {\n filed += \",\";\n }\n filed += prop;\n }\n if (value == 1) {\n filed = \"hideColumn('\" + filed + \"');\";\n } else if (value == 2) {\n filed = \"showColumn('\" + filed + \"');\";\n }\n navigator.clipboard.writeText(filed).then(() => {\n msg.success(\"复制成功!\" + filed);\n }).catch(err => {\n msg.error(\"复制失败!\" + filed);\n });\n }\n };\n //表头全选框更新\n const headerClick = column => {\n gridOptions.value.data.forEach(item => {\n if (column.params.all) {\n item.rules = [{\n required: true,\n message: '请输入' + item.title,\n trigger: 'blur'\n }];\n item[column.field] = '1';\n } else {\n item[column.field] = '0';\n item.rules = null;\n }\n });\n refreshForm();\n };\n\n //获取数据\n const setData = data => {\n if (!data) {\n return;\n }\n formType.value = parseInt(data.formMain.designer);\n for (let key of Object.keys(form)) {\n form[key] = data.formMain[key];\n }\n if (form.otherProp && form.otherProp.toString().trim()) {\n try {\n let otherPropJson = JSON.parse(form.otherProp);\n for (let key of Object.keys(otherProp)) {\n otherProp[key] = otherPropJson[key];\n }\n } catch (e) {\n console.error(e);\n }\n }\n customForm.value = data.formMain.customForm;\n //基础表单\n //JSON字符串\n if (data.formJson.optionJson) {\n codeForm.value = data.formJson.optionJson;\n codeToData();\n }\n if (data.formJson.customJson) {\n //自定义表单\n formJson.value = JSON.parse(data.formJson.customJson);\n }\n };\n function getColumn(item) {\n let obj = {\n prop: item.field,\n title: item.title || item.label,\n sort: gridOptions.value.data ? gridOptions.value.data.length : 0,\n //为空默认文本框\n selectDom: item.selectDom ? item.selectDom : 1,\n dictCode: item.dictCode,\n form: {\n dictTable: item.dictTable\n }\n };\n return obj;\n }\n\n //列配置新增多选更新\n const updateData = (row, column) => {\n if (row[column.field] == '1') {\n for (const item of gridOptions.value.data) {\n if (item.prop == row.field) return;\n }\n let tableObj = getColumn(row);\n gridOptions.value.data.push(tableObj);\n } else {\n gridOptions.value.data = gridOptions.value.data.filter(item => item.prop != row.field);\n }\n reloadData();\n refreshForm();\n };\n function parseJson(column) {\n let attrs = column.attrs;\n if (attrs) {\n try {\n attrs = JSON.parse(attrs);\n for (let key of Object.keys(attrs)) {\n column[key] = attrs;\n }\n } catch (e) {\n console.error(\"解析attrs异常\", attrs);\n }\n }\n }\n function reloadData(data) {\n if (data) {\n gridOptions.value.data = data;\n }\n if (vexGridRef.value) {\n vexGridRef.value.reloadData(gridOptions.value.data);\n }\n }\n\n //列配置新增全选与全不选\n const setAll = ({\n list,\n isAll\n }) => {\n let data = [];\n if (isAll) {\n for (let item of list) {\n data.push(getColumn(item));\n }\n }\n reloadData(data);\n refreshForm();\n };\n\n //基础表单 > 快捷设计表单更新\n const designFormChange = () => {\n //行数转换为尺寸\n baseOption.value.span = parseInt(24 / designForm.value.span);\n //JSON格式化\n codeForm.value = jsonFormat(baseOption.value);\n updateSort();\n };\n\n //控件类型更新\n const dictChange = ({\n row\n }) => {\n if (row.selectDom === '22') {\n //如果是表格选择器,则展开行,因为一定要配置其他属性,所以需要展开行\n if (row.form.attrs == null || row.form.attrs === '') {\n row.form.attrs = '{\\n' + ' \"olTableSelect\":{\\n' + ' \"uuid\":\"1901841070608990208\",\\n' + ' \"key\":\"id\",\\n' +\n //数据库要存的值,如:外键ID或某个编码\n ' \"label\":\"name\",\\n' +\n //选中数据后回显的数据\n ' \"labelIsAppendCode\":false,\\n' +\n //默认,可不填或不该\n ' \"otherResult\":\"目标字段1:源字段1,目标字段2:源字段2,目标字段3:源字段3\"\\n' +\n //需要额外字段数据格式配置:\"目标字段1:源字段1,目标字段2:源字段2\n ' }\\n' + '}';\n }\n vexGridRef.value.setRowExpand([row], true); //展开行\n }\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n baseOption.value.column.forEach(item => {\n if (item.prop == row.prop) {\n item.type = getFormType(row); //控件类型\n if (item.type === 'month') {\n item.format = 'YYYY-MM';\n item.valueFormat = 'YYYY-MM';\n }\n if (row.selectDom == 8) {\n item.multiple = true;\n }\n codeForm.value = jsonFormat(baseOption.value);\n return;\n }\n });\n });\n };\n let update = true;\n function refreshForm() {\n if (update != true) {\n setTimeout(() => {\n refreshForm();\n }, 200);\n }\n update = false;\n let data = JSON.parse(JSON.stringify(gridOptions.value.data));\n let columns = [];\n let index = 1;\n for (let d of data) {\n d.sort = index;\n let column = getCodeColumn(d);\n columns.push(column);\n index++;\n }\n columns.sort((a, b) => {\n return a.sort - b.sort;\n });\n setCodeForm(columns);\n setBaseOption(columns);\n update = true;\n }\n function setDictCode(column) {\n if (column.selectDom != 1 && (column.dictCode || column.dictTable || column.dictUrl)) {\n getDicData(column);\n }\n }\n function codeToData(alter) {\n try {\n getFormatter();\n let value = JSON.parse(codeForm.value);\n setSort(value);\n codeForm.value = jsonFormat(value);\n //更新快捷设计表格的数据\n setTableData(value);\n if (!value.labelWidth) value.labelWidth = 125;\n baseOption.value = value;\n setBaseOption(value.column);\n value.span = value.span ? value.span : 12;\n //计算表单每行个数\n designForm.value.span = parseInt(24 / value.span);\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n refreshForm();\n });\n if (alter) {\n msg.success(\"生成成功!\");\n }\n } catch (e) {\n console.error(e);\n msg.error('生成失败,请检查对象格式是否正确' + e);\n }\n }\n function setCodeForm(columns) {\n let option = JSON.parse(JSON.stringify(baseOption.value));\n option.column = JSON.parse(JSON.stringify(columns));\n codeForm.value = jsonFormat(option);\n }\n function setEvents(column) {\n for (let event of events) {\n if (column[event] != undefined && column[event] != '') {\n try {\n let e = replaceDollarBraces(column[event]);\n column[event] = eval(\"(params)=>{\" + e + \"}\");\n } catch (e) {\n console.error(e);\n }\n } else {\n delete column[event];\n }\n }\n }\n function replaceDollarBraces(str) {\n return str.replace(/\\$\\{?([^{}]+)\\}?/g, function (match, innerContent) {\n return innerContent ? `'${innerContent}'` : match;\n });\n }\n function setBaseOption(columns) {\n columns = JSON.parse(JSON.stringify(columns));\n for (let column of columns) {\n try {\n parseJson(column);\n setEvents(column);\n setDictCode(column);\n } catch (e) {\n console.error(e);\n }\n }\n baseOption.value.column = columns;\n }\n let events = ['change'];\n function getFormatter() {\n //正则表达式替换字符串的值\n let v = codeForm.value.replace(/,}/gi, \"}\").replace(/,]/gi, \"]\");\n codeForm.value = JSON.stringify(JSON.parse(v), null, 4);\n }\n function setSort(value) {\n value.column.sort((a, b) => {\n return a.sort - b.sort;\n });\n for (let i = 0; i < value.column.length; i++) {\n value.column.sort = i + 1;\n }\n }\n function getCodeColumn(row) {\n let columnObj = {};\n for (let column of gridOptions.value.columns) {\n if (column.field !== undefined && row[column.field] !== undefined && row[column.field] !== '' && row[column.field] !== null) {\n columnObj[column.field] = row[column.field];\n }\n }\n for (let column of expandForm.value.column) {\n if (column.prop !== undefined && row.form[column.prop] !== undefined && row.form[column.prop] !== '' && row.form[column.prop] !== null) {\n columnObj[column.prop] = row.form[column.prop];\n }\n }\n columnObj.label = columnObj.showName ? columnObj.showName : columnObj.title;\n if (columnObj.required == '1') {\n columnObj.rules = [{\n required: true,\n message: '请输入' + row.title,\n trigger: 'blur'\n }];\n }\n if (columnObj.required == '0') {\n delete columnObj.rules;\n delete columnObj.required;\n }\n if (columnObj != 1) {\n columnObj.type = getFormType(row);\n if (columnObj.type === 'month') {\n columnObj.format = 'YYYY-MM';\n columnObj.valueFormat = 'YYYY-MM';\n }\n if (row.selectDom == 8) {\n columnObj.multiple = true;\n }\n }\n return columnObj;\n }\n function getTableRow(data) {\n let obj = JSON.parse(JSON.stringify(data));\n obj.form = {};\n for (let column of gridOptions.value.columns) {\n if (column.field !== undefined && data[column.field] !== undefined && data[column.field].toString().trim() !== '') {\n obj[column.field] = data[column.field];\n }\n }\n for (let column of expandForm.value.column) {\n if (column.prop !== undefined && data[column.prop] !== undefined && data[column.prop].toString().trim() !== '') {\n obj.form[column.prop] = data[column.prop];\n }\n }\n for (let event of events) {\n if (obj[event] != undefined && !(obj[event] instanceof Function)) {\n obj[event] = obj[event].toString();\n }\n }\n if (data.label) {\n obj.showName = data.label;\n if (!obj.title) {\n obj.title = data.label;\n }\n }\n if (data.label) {\n obj.showName = data.label;\n obj.title = data.label;\n }\n delete obj.type;\n return obj;\n }\n\n //编码设计生成后更新快捷设计表格数据\n const setTableData = value => {\n let datas = [];\n for (let column of value.column) {\n let data = getTableRow(column);\n datas.push(data);\n }\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n gridOptions.value.data = datas;\n });\n };\n function setDicData(column) {\n baseOption.value.column.forEach(item => {\n if (item.prop == column.prop) {\n item.dicData = column.dicData;\n return;\n }\n });\n }\n const setDictUrl = column => {\n let dictUrl = column.dictUrl.split(\",\");\n let url;\n let label = 'label';\n let value = 'value';\n let parentId = 'parentId';\n // get,url,label,value,parent_id\n let doGet = true;\n if (dictUrl.length > 1) {\n if (dictUrl[0].toString().toLowerCase() == 'post') {\n doGet = false;\n }\n url = dictUrl[1];\n label = dictUrl[2];\n value = dictUrl[3];\n parentId = dictUrl[4];\n } else {\n url = dictUrl[0];\n }\n if (doGet) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.get)(http, url).then(data => {\n column.dicData.length = 0;\n if (column.type == 'tree') {\n for (let da of data) {\n da['label'] = da[label];\n da['value'] = da[value];\n }\n column.dicData = (0,_utils_tree__WEBPACK_IMPORTED_MODULE_16__.handleTree)(data, value, parentId);\n } else {\n data.forEach(d => {\n column.dicData.push(d);\n });\n }\n });\n } else {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.post)(http, column.dictUrl, false, false).then(({\n data\n }) => {\n column.dicData.length = 0;\n if (column.type == 'tree') {\n for (let da of data) {\n da['label'] = da[label];\n da['value'] = da[value];\n }\n column.dicData = (0,_utils_tree__WEBPACK_IMPORTED_MODULE_16__.handleTree)(data, value, parentId);\n } else {\n data.forEach(da => {\n da['label'] = da[label];\n da['value'] = da[value];\n column.dicData.push(da);\n });\n }\n });\n }\n };\n //获取字典\n const getDicData = column => {\n let code = column.dictCode;\n if (code == \"\" || !code) {\n delete column.dicData;\n } else if (column.dictTable) {\n getParameter(column);\n } else if (column.dictUrl) {\n setDictUrl(column);\n } else {\n const dict = (0,_store_dict__WEBPACK_IMPORTED_MODULE_14__.storeDict)();\n column.dicData = dict.val(column.dictCode);\n setDicData(column);\n }\n };\n function getParameter(column) {\n let params = {};\n let dictTable = JSON.parse(JSON.stringify(column.dictTable));\n if (dictTable instanceof Object) {\n params = dictTable;\n } else {\n dictTable = column.dictTable.split(\",\");\n params[\"dbName\"] = dictTable[0];\n params[\"tableName\"] = dictTable[1];\n params[\"label\"] = dictTable[2];\n params[\"value\"] = dictTable[3];\n if (dictTable[4]) {\n params[\"parentValue\"] = dictTable[4];\n }\n }\n (0,_api_dist__WEBPACK_IMPORTED_MODULE_17__.initDictTable)(http, params).then(data => {\n column.dicData.length = 0;\n for (let d of data) {\n d.label = d.dictLabel;\n d.value = d.dictValue;\n }\n if (params[\"parentValue\"]) {\n data = (0,_utils_tree__WEBPACK_IMPORTED_MODULE_16__.handleTree)(data, 'value', 'parentValue');\n column.dicData.push(data);\n } else {\n for (let d of data) {\n d.label = d.dictLabel;\n d.value = d.dictValue;\n column.dicData.push(d);\n }\n }\n setDicData(column);\n });\n }\n\n //JSON格式化\n const jsonFormat = val => {\n return JSON.stringify(JSON.parse(JSON.stringify(val)), null, 4);\n };\n\n //控件类型转换\n const getFormType = row => {\n let val = row.selectDom;\n if (val != '' || val != undefined || val) {\n let type;\n let map = {\n input: '1',\n select: '2',\n datetime: '3',\n time: '30',\n radio: '4',\n checkbox: '5',\n date: '6',\n month: '11',\n datetimerange: '12',\n daterange: '13',\n number: '7',\n tree: '15',\n textarea: '10'\n };\n if (isNaN(val)) {\n //不是数字,通过健找值\n type = map[val];\n } else {\n if (val == 8) {\n type = \"select\";\n } else {\n //是数字,通过值找健\n // 使用 Object.values() 获取对象的所有值\n const arr = Object.values(map);\n // 使用 Array.prototype.indexOf() 查找指定值在数组中的索引位置\n const index = arr.indexOf(val);\n // 使用 Object.keys()[index] 获取对应索引位置的键名\n type = Object.keys(map)[index];\n }\n if (type == null) {\n type = 'input';\n } else if (['select', 'checkbox', 'radio', 'tree'].indexOf(type) != -1) {\n getDicData(row);\n }\n }\n return type;\n }\n };\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.onMounted)(() => {\n updateSort();\n });\n function addColumn() {\n gridOptions.value.data.push({\n sort: gridOptions.value.data.length,\n prop: \"\",\n title: \"\",\n showName: \"\",\n selectDom: \"1\",\n label: \"\",\n type: \"input\",\n form: {}\n });\n refreshForm();\n }\n\n //表格拖动更新\n const updateSort = () => {\n (0,vue__WEBPACK_IMPORTED_MODULE_7__.nextTick)(() => {\n if (!vexGridRef.value) {\n return;\n }\n //el绑定元素需要找到vxe的DOM下的tbody元素\n sortablejs__WEBPACK_IMPORTED_MODULE_12__[\"default\"].create(vexGridRef.value.$el.querySelector('.body--wrapper>.vxe-table--body tbody'), {\n animation: 130,\n //拖拽动画过渡时间\n handle: '.vxe-icon-sort',\n // 结束拖拽\n onEnd: function (/**Event*/{\n oldIndex,\n newIndex\n }) {\n const list = JSON.parse(JSON.stringify(gridOptions.value.data)); //保存旧数据\n const targetRow = list.splice(oldIndex, 1)[0]; //保存移动的元素并删除原列表中移动的元素\n list.splice(newIndex, 0, targetRow); //插入到目标新索引中\n const newsArr = JSON.parse(JSON.stringify(list)); //重新赋值数组\n //将新表格数据重新排序\n for (let i = 0; i < newsArr.length; i++) {\n newsArr[i].sort = i;\n }\n gridOptions.value.data = newsArr;\n //把表单的排序号和表格的排序号保持一致\n newsArr.forEach(tableItem => {\n baseOption.value.column.forEach(formItem => {\n if (tableItem.prop == formItem.prop) {\n formItem.sort = tableItem.sort;\n }\n });\n });\n //将表单重新排序\n baseOption.value.column.sort((a, b) => {\n return a.sort - b.sort;\n });\n codeForm.value = jsonFormat(baseOption.value);\n }\n });\n });\n };\n const form = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({\n updateKey: '',\n createBy: '',\n updateBy: '',\n saveUrl: '',\n title: '',\n otherProp: {},\n requestType: 'post',\n formType: props.type\n });\n const state = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({\n extensions: [(0,_codemirror_lang_javascript__WEBPACK_IMPORTED_MODULE_21__.javascript)(), _codemirror_theme_one_dark__WEBPACK_IMPORTED_MODULE_22__.oneDark],\n values: null,\n err: false,\n baseForm: {},\n baseFormRender: {}\n });\n const formMap = (0,vue__WEBPACK_IMPORTED_MODULE_7__.reactive)({});\n\n // 更换表单\n const onChangeForm = value => {\n if (value) {\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.get)(http, \"/online/formDesigner/queryById\", {\n id: value\n }).then(data => {\n formJson.value = JSON.parse(data.formJson);\n formKey.value++;\n });\n }\n };\n const getForm = () => {\n form.otherProp = JSON.stringify(otherProp);\n return (0,vue__WEBPACK_IMPORTED_MODULE_7__.markRaw)(form);\n };\n // 获取新增表单配置数据\n const getData = () => {\n if (formType.value == 0 && gridOptions.value.data.length == 0) {\n return undefined;\n }\n refreshForm();\n let obj = {\n vexTable: gridOptions.value,\n baseForm: baseOption.value,\n codeForm: codeForm.value,\n designer: formType.value,\n customJson: formJson.value,\n customForm: customForm.value\n };\n return obj;\n };\n /**\r\n * 右边字段配置删除行数据\r\n * @param row\r\n * @returns {Promise<void>}\r\n */\n const removeRowEvent = async row => {\n const type = await vxe_table__WEBPACK_IMPORTED_MODULE_15___default().modal.confirm('您确定要删除该数据?');\n const $grid = vexGridRef.value;\n if ($grid && type === 'confirm') {\n await $grid.remove(row);\n gridOptions.value.data = gridOptions.value.data.filter(item => item._X_ROW_KEY != row._X_ROW_KEY);\n removeColumnEvent(row);\n }\n };\n /**\r\n * 删除表单属性(快捷设计属性)\r\n * @param row\r\n */\n const removeColumnEvent = row => {\n baseOption.value.column = baseOption.value.column.filter(item => item.prop != row.prop);\n codeForm.value = jsonFormat(baseOption.value);\n };\n\n /**\r\n * 表格选择器回调函数\r\n * @param data\r\n */\n function olTableSelectChange(slotName, data) {\n console.info('插槽名称', slotName);\n console.info('表格回传的数据', data);\n }\n\n // 动态获取需要渲染的插槽名称列表\n const dynamicSlotsTable = (0,vue__WEBPACK_IMPORTED_MODULE_7__.computed)(() => {\n const result = baseOption.value.column.filter(item => item.selectDom === '22' || item.selectDom === '21') // 筛选出需要动态插槽的字段(表单选择)\n .map(item => {\n let slotObj = {\n slotName: item.prop,\n type: item.selectDom,\n config: item.attrs != null ? JSON.parse(item.attrs).olTableSelect : {}\n };\n return slotObj;\n }); // 获取字段名作为插槽名\n return result;\n });\n\n // 对外暴露\n __expose({\n setData,\n updateData,\n setAll,\n getData,\n setShow,\n getForm,\n setUpdateKey\n });\n const __returned__ = {\n msg,\n http,\n dictType,\n props,\n customUrl,\n vexGridRef,\n vFormViewer,\n dialogTableVisible,\n setShow,\n setUpdateKey,\n showViewForm,\n otherProp,\n baseOption,\n codeForm,\n copeFiled,\n dict,\n formType,\n formConfig,\n designForm,\n gridOptions,\n expandForm,\n formJson,\n formData,\n formKey,\n optionData,\n vFormRef,\n customForm,\n copeFiledMethod,\n headerClick,\n setData,\n getColumn,\n updateData,\n parseJson,\n reloadData,\n setAll,\n designFormChange,\n dictChange,\n get update() {\n return update;\n },\n set update(v) {\n update = v;\n },\n refreshForm,\n setDictCode,\n codeToData,\n setCodeForm,\n setEvents,\n replaceDollarBraces,\n setBaseOption,\n get events() {\n return events;\n },\n set events(v) {\n events = v;\n },\n getFormatter,\n setSort,\n getCodeColumn,\n getTableRow,\n setTableData,\n setDicData,\n setDictUrl,\n getDicData,\n getParameter,\n jsonFormat,\n getFormType,\n addColumn,\n updateSort,\n form,\n state,\n formMap,\n onChangeForm,\n getForm,\n getData,\n removeRowEvent,\n removeColumnEvent,\n olTableSelectChange,\n dynamicSlotsTable,\n get vForm() {\n return _components_table_ol_form__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n },\n get Delete() {\n return _element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6__.Delete;\n },\n get Search() {\n return _element_plus_icons_vue__WEBPACK_IMPORTED_MODULE_6__.Search;\n },\n reactive: vue__WEBPACK_IMPORTED_MODULE_7__.reactive,\n ref: vue__WEBPACK_IMPORTED_MODULE_7__.ref,\n nextTick: vue__WEBPACK_IMPORTED_MODULE_7__.nextTick,\n onMounted: vue__WEBPACK_IMPORTED_MODULE_7__.onMounted,\n inject: vue__WEBPACK_IMPORTED_MODULE_7__.inject,\n markRaw: vue__WEBPACK_IMPORTED_MODULE_7__.markRaw,\n computed: vue__WEBPACK_IMPORTED_MODULE_7__.computed,\n vComponent: _components_v_component_index_vue__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n get Codemirror() {\n return vue_codemirror__WEBPACK_IMPORTED_MODULE_9__.Codemirror;\n },\n get javascript() {\n return _codemirror_lang_javascript__WEBPACK_IMPORTED_MODULE_21__.javascript;\n },\n get oneDark() {\n return _codemirror_theme_one_dark__WEBPACK_IMPORTED_MODULE_22__.oneDark;\n },\n get useMessage() {\n return _utils_message__WEBPACK_IMPORTED_MODULE_10__.useMessage;\n },\n get get() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.get;\n },\n get post() {\n return _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_11__.post;\n },\n get Sortable() {\n return sortablejs__WEBPACK_IMPORTED_MODULE_12__[\"default\"];\n },\n get storeDictType() {\n return _store_dictType__WEBPACK_IMPORTED_MODULE_13__.storeDictType;\n },\n get storeDict() {\n return _store_dict__WEBPACK_IMPORTED_MODULE_14__.storeDict;\n },\n get VXETable() {\n return (vxe_table__WEBPACK_IMPORTED_MODULE_15___default());\n },\n get handleTree() {\n return _utils_tree__WEBPACK_IMPORTED_MODULE_16__.handleTree;\n },\n get initDictTable() {\n return _api_dist__WEBPACK_IMPORTED_MODULE_17__.initDictTable;\n },\n OlTableSelect: _components_ol_table_select_vue__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n OlTableSelectConfig: _components_ol_table_select_config_vue__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n get IconSelect() {\n return _components_Icon__WEBPACK_IMPORTED_MODULE_20__.IconSelect;\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n});\n\n//# sourceURL=webpack://olp-table/./src/views/table/add-or-edit/config/form-config/index.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
|
|
975
975
|
|
|
976
976
|
/***/ }),
|
|
977
977
|
|
|
@@ -12764,7 +12764,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sty
|
|
|
12764
12764
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
12765
12765
|
|
|
12766
12766
|
"use strict";
|
|
12767
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DefaultMethods: function() { return /* binding */ DefaultMethods; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_some_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.some.js */ \"./node_modules/core-js/modules/es.iterator.some.js\");\n/* harmony import */ var core_js_modules_es_iterator_some_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_some_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_set_difference_v2_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.set.difference.v2.js */ \"./node_modules/core-js/modules/es.set.difference.v2.js\");\n/* harmony import */ var core_js_modules_es_set_difference_v2_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_difference_v2_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_set_intersection_v2_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.set.intersection.v2.js */ \"./node_modules/core-js/modules/es.set.intersection.v2.js\");\n/* harmony import */ var core_js_modules_es_set_intersection_v2_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_intersection_v2_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_es_set_is_disjoint_from_v2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.set.is-disjoint-from.v2.js */ \"./node_modules/core-js/modules/es.set.is-disjoint-from.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_disjoint_from_v2_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_is_disjoint_from_v2_js__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_es_set_is_subset_of_v2_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.set.is-subset-of.v2.js */ \"./node_modules/core-js/modules/es.set.is-subset-of.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_subset_of_v2_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_is_subset_of_v2_js__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_es_set_is_superset_of_v2_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.set.is-superset-of.v2.js */ \"./node_modules/core-js/modules/es.set.is-superset-of.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_superset_of_v2_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_is_superset_of_v2_js__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var core_js_modules_es_set_symmetric_difference_v2_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.set.symmetric-difference.v2.js */ \"./node_modules/core-js/modules/es.set.symmetric-difference.v2.js\");\n/* harmony import */ var core_js_modules_es_set_symmetric_difference_v2_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_symmetric_difference_v2_js__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var core_js_modules_es_set_union_v2_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/es.set.union.v2.js */ \"./node_modules/core-js/modules/es.set.union.v2.js\");\n/* harmony import */ var core_js_modules_es_set_union_v2_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_union_v2_js__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _utils_tree__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/utils/tree */ \"./src/utils/tree.js\");\n/* harmony import */ var _utils_message__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/utils/message */ \"./src/utils/message.js\");\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var _utils_ExcelUtil__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @/utils/ExcelUtil */ \"./src/utils/ExcelUtil.js\");\n/* harmony import */ var vxe_table__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! vxe-table */ \"vxe-table\");\n/* harmony import */ var vxe_table__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(vxe_table__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _utils_groupCompute__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @/utils/groupCompute */ \"./src/utils/groupCompute.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst message = (0,_utils_message__WEBPACK_IMPORTED_MODULE_13__.useMessage)(); // 消息弹窗\nconst DefaultMethods = {\n methods: {\n //删除主子表\n async doRemoveMainAndSub({\n obj,\n row\n }, subTableName, whereObj, subForeignKey, content) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n this.doPostAes(obj.code, '/online/crudAes/deleteMainAndSubs', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n subTableName: subTableName,\n whereMap: this.doGetWhereMap(row, whereObj),\n //更新条件\n subForeignKey: subForeignKey\n });\n },\n getUniKey() {\n if (!this.tableConfig.cardKey) {\n return this.formMainList.edit.formMain.updateKey.trim();\n }\n return this.tableConfig.cardKey.trim();\n },\n /**\r\n * 操作列保存:直接在操作按钮的自定义事件加入代码:this.doOneSave(o,'是否要保存数据')\r\n * @param obj 单击按钮的对象\r\n * @param row 单击当前行\r\n * @param content 提示内容\r\n * @returns {Promise<void>}\r\n */\n async doOneSave({\n obj,\n row\n }, content) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n if (!row) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"数据为空!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n let dataSource = this.table.dataSource;\n if (!dataSource) {\n return;\n }\n let newRow = JSON.parse(JSON.stringify(row));\n try {\n newRow[this.getUniKey()] = '';\n } catch (e) {}\n let params = {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n genIdMap: {\n [this.getUniKey()]: 'uuid'\n },\n columnAndValueMap: this.getColumnTableUpdateValue(this.table.columns, newRow)\n };\n this.doPostAes(obj.code, '/online/crudAes/save', params);\n },\n /**\r\n * 操作列更新:直接在操作按钮的自定义事件加入代码:this.doOneModify(o,'数据库更新字段=数据值,数据库更新字段:列字段,数据库更新字段','数据库更新条件','提示内容')\r\n *\r\n * @param obj 单击按钮的对象\r\n * @param row 单击当前行\r\n * @param updateObj\r\n * @param whereObj\r\n * @param content\r\n * @returns {Promise<void>}\r\n */\n async doOneModify({\n obj,\n row\n }, updateObj, whereObj, content) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n let newRow = JSON.parse(JSON.stringify(row));\n this.doPostAes(obj.code, '/online/crudAes/modify', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n columnAndValueMap: this.doGetColumnAndValueMap(newRow, updateObj),\n //更新字段\n whereMap: this.doGetWhereMap(newRow, whereObj) //更新条件\n });\n },\n /**\r\n * 批量保存数据(包含更新)\r\n * @param code\r\n * @param updateObj\r\n * @param whereObj\r\n * @param content\r\n * @param updateRecords 如果为空,获取全部选中数据\r\n * @returns {Promise<void>}\r\n */\n async doBatchSave(code, content, rows, tableKey, genIdMap) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n if (rows == undefined) {\n rows = this.getUpdateRecordsRow();\n }\n if (rows.length == 0) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"无需保存数据!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n if (tableKey == undefined) {\n tableKey = this.tableConfig.cardKey;\n }\n if (genIdMap == undefined) {\n genIdMap = {};\n for (let tableKeyElement of tableKey.split(\",\")) {\n genIdMap[tableKeyElement.toString()] = 'uuid';\n }\n }\n this.doPostAes(code, '/online/crudAes/batchSave', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n tableConfigId: this.tableConfig.tableConfigId,\n columnAndValueListMap: rows,\n tableKey: tableKey,\n genIdMap: genIdMap\n });\n },\n /**\r\n * 批量更新\r\n * @param code\r\n * @param updateObj\r\n * @param whereObj\r\n * @param content\r\n * @param updateRecords 如果为空,获取全部选中数据\r\n * @returns {Promise<void>}\r\n */\n async doBatchModify(code, updateObj, whereObj, content, updateRecords) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n let rows = updateRecords;\n if (!updateRecords || updateRecords.length <= 0) {\n rows = this.getSelectRows();\n }\n if (rows.length == 0) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"请选数据!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n let list = [];\n for (const row of rows) {\n list.push({\n columnAndValueMap: this.doGetColumnAndValueMap(row, updateObj),\n //更新字段\n whereMap: this.doGetWhereMap(row, whereObj) //更新条件\n });\n }\n this.doPostAes(code, '/online/crudAes/batchModify', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n list\n });\n },\n /**\r\n * 直接发送post请求\r\n * @param code\r\n * @param url\r\n * @param params\r\n */\n doPostAes(code, url, params, noQuery) {\n if (code != undefined) {\n this.loading[code] = true;\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, url, params).then(r => {\n if (r != false && noQuery != false) {\n this.query();\n }\n }).finally(() => {\n if (code != undefined) {\n this.loading[code] = false;\n }\n });\n },\n /**\r\n * 根据列配置获取数据库表更新数据\r\n * @param column\r\n * @param formData\r\n * @returns {{}}\r\n */\n getTableUpdateValue(column, formData) {\n let columnAndValueMap = {};\n for (let {\n prop,\n tableField\n } of column) {\n if (!tableField || tableField != '1') {\n continue;\n }\n let value = formData[prop];\n if (value) {\n if (value instanceof String) {\n value = value.trim();\n }\n columnAndValueMap[prop] = value;\n }\n }\n return columnAndValueMap;\n },\n /**\r\n * 获取表格更新列值\r\n * @param column\r\n * @param formData\r\n * @returns {{}}\r\n */\n getColumnTableUpdateValue(column, formData) {\n let columnAndValueMap = {};\n for (let {\n field,\n tableSaveToOtherProp\n } of column) {\n // 勾选,不属于数据库表字段\n if (tableSaveToOtherProp && tableSaveToOtherProp == '1') {\n continue;\n }\n let value = formData[field];\n if (value) {\n if (value instanceof String) {\n value = value.trim();\n }\n columnAndValueMap[field] = value;\n }\n }\n return columnAndValueMap;\n },\n /**\r\n * 获取row更新值\r\n * @param row\r\n * @param updateObj 更新对象,允许为:\"name='xx',name\" 如果name=xx,数据直接赋值,如果没有=,则使用row的值\r\n * @returns {{}}\r\n */\n doGetColumnAndValueMap(row, updateObj) {\n let columnAndValueMap = {};\n for (let key of updateObj.split(\",\")) {\n let k = key.split(\"=\");\n if (k.length == 2) {\n columnAndValueMap[k[0]] = k[1];\n } else {\n k = key.split(\":\");\n columnAndValueMap[k[k.length - 1]] = row[k[0]];\n }\n }\n return columnAndValueMap;\n },\n doGetColumnAndValueAny(rows, updateObj) {\n if (!updateObj) {\n return rows;\n }\n let list = [];\n let keys = [];\n let hasKey = '';\n for (const row of rows) {\n keys = keys.length >= 1 ? keys : Object.keys(row);\n if (!hasKey) {\n hasKey = this.hasUpdateKey(keys, updateObj);\n }\n if (hasKey) {\n Object.assign(row, this.doGetColumnAndValueMap(row, updateObj));\n }\n list.push(row);\n }\n return list;\n },\n hasUpdateKey(keys, updateObj) {\n for (const key of keys) {\n if (updateObj.indexOf(key) >= 0) {\n return '1';\n }\n }\n return '0';\n },\n doGetWhereMap(row, whereObj) {\n let whereMap = {};\n for (let key of whereObj.split(\",\")) {\n let k = key.split(\":\");\n //className:class_name row:{className:'xxx'} whereMap:{class_name}\n whereMap[k[k.length - 1]] = row[k[0]];\n }\n return whereMap;\n },\n /**\r\n * 内置批量删除方法\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n batchRemove() {\n this.confirm(\"您选中\" + this.getSelectRows().length + '条数据,删除后不可恢复,您确定要删除吗?', '删除提示', 'error').then(type => {\n if (type != \"cancel\") {\n // 1. 子数据存在性校验\n const hasChildData = this.getSelectRows().some(row => row?.children);\n if (hasChildData) {\n return message.error('存在包含子数据的记录,禁止删除!');\n }\n // 2. 分离有ID和无ID数据\n const rowsWithId = [];\n const rowsWithoutId = [];\n this.getSelectRows().forEach(row => {\n this.hasValidId(row) ? rowsWithId.push(row) : rowsWithoutId.push(row);\n });\n\n // 3. 处理无ID数据(前端直接移除)\n if (rowsWithoutId.length > 0) {\n rowsWithoutId.forEach(row => this.removeFromTableByReference(row));\n }\n // 修改点:如果没有有ID的数据,直接返回\n if (rowsWithId.length === 0) return;\n let list = [];\n for (let r of this.getSelectRows()) {\n let p = JSON.parse(JSON.stringify(this.deleteParameter));\n delete p['$parentId'];\n for (let key of Object.keys(p)) {\n p[key] = r[key];\n }\n list.push(p);\n }\n this.loading['batchDelete'] = true;\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, '/online/crudAes/batchDelete', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n list: list\n }).then(r => {\n if (r != false) {\n this.query();\n }\n }).finally(() => {\n this.loading['batchDelete'] = false;\n });\n }\n });\n },\n /**\r\n * 内置重置方法\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n resetQuery() {\n for (let k of Object.keys(this.table.formConfig.data)) {\n this.table.formConfig.data[k] = undefined;\n }\n for (let k of Object.keys(this.parameter)) {\n this.parameter[k] = undefined;\n }\n this.initDefaultValue();\n this.query();\n },\n /**\r\n * 内置根据参数查询\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n queryParams(parameter) {\n if (parameter) {\n Object.assign(this.parameter, parameter);\n }\n return this.query();\n },\n /**\r\n * 内置查询\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n query() {\n let axios = undefined;\n if (this.tableConfig.definitionSql == 2) {\n if (this.tableConfig.requestType == '1') {\n axios = (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.post)(this.http, this.tableConfig.api, this.getParams(), false, false);\n } else {\n axios = (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.get)(this.http, this.tableConfig.api, this.getParams(), false);\n }\n } else if (this.tableConfig.aes == 1) {\n axios = (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, '/online/crudAes/query', this.getParams(), false, false);\n } else {\n axios = (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.post)(this.http, '/online/crud/query', this.getParams(), false, false);\n }\n this.doQuery(axios);\n },\n async doSetData(data) {\n let respData = data instanceof Array ? data : data.listData;\n const dictRequests = [];\n for (let column of this.table.columns) {\n if (column.visible == 1 && column.params && column.params.tableSelect) {\n dictRequests.push(this.fetchAndMapDictData(respData, column));\n }\n }\n await Promise.all(dictRequests);\n if (this.table.treeConfig) {\n respData = (0,_utils_tree__WEBPACK_IMPORTED_MODULE_12__.handleTree)(respData, this.table.treeConfig.treeId, this.table.treeConfig.treeParentId);\n }\n this.table.data = respData;\n this.doGroupAndCompute(respData);\n this.pagination.total = data.count;\n this.doEvent(\"queryAfter\");\n },\n async doQuery(axios) {\n if (this.loading['select']) {\n return;\n }\n this.table.loading = true;\n this.loading['select'] = true;\n await axios.then(async ({\n data,\n code,\n msg\n }) => {\n if (code != 200 && code != 0) {\n message.error(msg);\n return;\n }\n this.doSetData(data);\n }).finally(() => {\n this.table.loading = false;\n this.loading['select'] = false;\n });\n },\n getPKArrays(value) {\n let uniqueIds = new Set();\n //字段值不为空\n if (value != undefined && value.toString().trim().length > 0) {\n try {\n // 尝试解析 JSON 字符串(如 \"[1,2]\" → [1, 2])\n let parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n for (let parsedElement of parsed) {\n uniqueIds.add(parsedElement.toString().trim());\n }\n } else {\n uniqueIds.add(String(value).trim());\n }\n } catch {\n if (value.includes(',')) {\n for (let v of value.trim().split(',')) {\n uniqueIds.add(String(v).trim());\n }\n } else {\n uniqueIds.add(String(value).trim());\n }\n }\n }\n return uniqueIds;\n },\n /**\r\n * 根据动态配置获取并映射字典数据\r\n * @param {Array} typeField - 动态列配置(如 departmentColumnsConfig)\r\n */\n async fetchAndMapDictData(data, column) {\n let uniqueIds = new Set();\n for (let item of data) {\n let value = item[column.field];\n uniqueIds.add(...this.getPKArrays(value));\n }\n if (!column.params) {\n column.params = {\n tableDataObj: {}\n };\n } else if (column.params.tableDataObj) {\n for (let key of Object.keys(column.params.tableDataObj)) {\n uniqueIds.delete(key);\n }\n } else {\n column.params.tableDataObj = {};\n }\n if (uniqueIds.size != 0) {\n // 构造请求参数\n const params = {\n id: column.params.uuid,\n theme: \"t1\",\n enablePage: false,\n queryParameterMapIn: {}\n };\n params.queryParameterMapIn[column.params.key] = Array.from(uniqueIds);\n try {\n return (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, '/online/crudAes/query', params, false, false).then(({\n data\n }) => {\n // 处理API返回数据\n if (data?.listData?.length > 0) {\n data.listData.forEach(item => {\n column.params.tableDataObj[item[column.params.key]] = item[column.params.label];\n });\n }\n });\n } catch (error) {\n console.error('数据请求失败:', params, error);\n return true;\n }\n } else {\n return true;\n }\n },\n /**\r\n * 内置删除方法\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n remove(o) {\n let {\n row\n } = o;\n this.confirm('数据删除后不可恢复,您确定要删除吗?', '删除提示', 'error').then(type => {\n if (type != \"cancel\") {\n // 校验是否存在子数据\n if (row && row.children) {\n return message.error('存在包含子数据的记录,禁止删除!');\n }\n // 判断是否存在有效ID(兼容字符串和数字类型ID)\n const hasValidId = this.hasValidId(row);\n if (!hasValidId) {\n // 通过对象引用删除(无ID时使用)\n return this.removeFromTableByReference(row);\n }\n let params = {};\n for (let key of Object.keys(this.deleteParameter)) {\n if (key != '$parentId') {\n params[key] = row[key];\n }\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, '/online/crudAes/delete', {\n where: params,\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable\n }).then(r => {\n if (r != false) {\n this.query();\n }\n });\n }\n });\n },\n /**\r\n * 有有效id\r\n * @param row\r\n * @returns {boolean}\r\n */\n hasValidId(row) {\n const idKey = this.getDeleteId(this.deleteParameter);\n const idValue = row[idKey];\n console.log('hasValidId', idKey, idValue);\n return idValue !== undefined && idValue !== null && idValue !== '';\n },\n /**\r\n * 通过对象引用删除(无ID时使用)\r\n * @param o\r\n */\n removeFromTableByReference(o) {\n const index = this.table.data.indexOf(o);\n if (index !== -1) {\n this.table.data.splice(index, 1);\n } else {\n console.error(\"未找到要删除的数据项\");\n }\n },\n /**\r\n * 获取查询参数\r\n * @returns {{enablePage: OTMixinBodyMethods.methods.pagination.enabled, theme: OTMixinBodyMethods.methods.theme, id: OTMixinBodyMethods.methods.uuid}}\r\n */\n getParams() {\n if (this.tableConfig.definitionSql == 2) {\n let params = JSON.parse(JSON.stringify(this.table.formConfig.data));\n if (params.enablePage) {\n params.pageNumber = this.pagination.currentPage;\n params.pageSize = this.pagination.pageSize;\n }\n return {\n ...this.parameter,\n ...params\n };\n }\n let params = {\n id: this.uuid,\n theme: this.theme,\n enablePage: this.pagination.enabled\n };\n if (params.enablePage) {\n params.pageNumber = this.pagination.currentPage;\n params.pageSize = this.pagination.pageSize;\n }\n let paramsKey = [];\n for (let o of this.table.formConfig.items) {\n let value = this.table.formConfig.data[o.key];\n if (value == undefined || value == '' || o.itemRender && o.itemRender.name == '$buttons') {\n continue;\n }\n let key = o.key.replace(/\\$/g, '');\n //文本域\n if (o.itemRender && o.itemRender.name == \"textarea\" && o.type != \"9\") {\n let values = value instanceof Array ? value : value.split(\"\\n\");\n if (values.length != 0) {\n let queryParameterMapIn = [];\n for (let v of values) {\n if (v != undefined && v.toString().trim() != '') {\n queryParameterMapIn.push(v);\n }\n }\n if (queryParameterMapIn.length != 0) {\n if (!params['queryParameterMapIn']) {\n params['queryParameterMapIn'] = {};\n }\n params['queryParameterMapIn'][key] = queryParameterMapIn;\n paramsKey.push(key);\n } else if (params['queryParameterMapIn']) {\n delete params['queryParameterMapIn'][key];\n }\n }\n } else if (value.toString().trim() != '') {\n if (!params['queryParameterListAnd']) {\n params['queryParameterListAnd'] = [];\n }\n let values = value instanceof Array ? value : value.split(\",\");\n if (o.type == \"98\") {\n params['queryParameterListAnd'].push({\n value: values[0],\n key: key,\n type: 5,\n toDate: o.toDate\n });\n params['queryParameterListAnd'].push({\n value: values[1],\n key: key,\n type: 6,\n toDate: o.toDate\n });\n paramsKey.push(key);\n } else if (!(values instanceof Array)) {\n let isNumber = o.selectDom == 7;\n o.value = value;\n //type 查询类型 默认等于1--> 1:= 2:!= 3: > 4:< 5: >= 6: <= 7:like '%value' 8:like '%value%' 9:like 'value%'\n //replace(/\\$/g, '') 目的解决范围\n let obj = {\n value: isNumber ? Number(value) : value,\n key: key,\n type: o.type,\n toDate: o.toDate\n };\n params['queryParameterListAnd'].push(obj);\n paramsKey.push(key);\n } else {\n let isNumber = o.selectDom == 7;\n for (let v of values) {\n if (!v) {\n continue;\n }\n let obj = {\n value: isNumber ? Number(v) : v,\n key: key,\n type: o.type,\n toDate: o.toDate\n };\n params['queryParameterListAnd'].push(obj);\n paramsKey.push(key);\n }\n }\n }\n }\n for (let key of Object.keys(this.parameter)) {\n let v = this.parameter[key];\n if (paramsKey.indexOf(key) === -1 && v != undefined && v != '') {\n if (v instanceof Array) {\n if (!params['queryParameterMapIn']) {\n params['queryParameterMapIn'] = {};\n }\n params['queryParameterMapIn'][key] = v;\n } else {\n if (!params['queryParameterListAnd']) {\n params['queryParameterListAnd'] = [];\n }\n params['queryParameterListAnd'].push({\n key: key,\n value: v\n });\n }\n }\n }\n if (this.orderByColumns.length != 0) {\n params['orderBy'] = this.orderByColumns;\n }\n params.authVo = {\n \"tableAliasFiled\": this.tableConfig.tableAliasFiled,\n \"departmentFiled\": this.tableConfig.departmentFiled,\n \"userFiled\": this.tableConfig.userFiled\n };\n this.doEvent(\"queryBefore\", params);\n return params;\n },\n doEvent(name, params) {\n if (this.events[name]) {\n setTimeout(() => {\n this.$nextTick(() => {\n this.events[name](params);\n });\n }, 100);\n }\n },\n /**\r\n * 导出数据\r\n * @param columns 自定义导出字段 t_id\r\n * @param selectData 选择数据: 当前页数据、勾选行数据、全部数据\r\n * @param name\r\n */\n exportData({\n exportParam,\n cancelEvent\n }) {\n let {\n columns,\n selectData,\n name\n } = exportParam;\n for (let column of this.table.columns) {\n for (let c of columns) {\n if (column.field === c.field && column.params) {\n c.params = column.params;\n }\n }\n }\n let data = [];\n switch (selectData) {\n case '1':\n // 当前页\n data = this.table?.data;\n break;\n case '2':\n // 勾选\n data = this.getSelectRows();\n if (!data || data.length == 0) return message.error('勾选行数据为空!');\n break;\n case '3':\n // 全部数据\n this.exportExcelAll(columns, name);\n break;\n default:\n data = this.table.data;\n break;\n }\n if (selectData != '3') {\n (0,_utils_ExcelUtil__WEBPACK_IMPORTED_MODULE_15__.exportExcel)({\n data: data,\n name: name,\n columns: columns,\n option: {\n align: this.$table ? this.$table.align : 'center'\n }\n });\n }\n cancelEvent();\n },\n /**\r\n * 全部数据导出\r\n * @param fields 自定义导出字段\r\n * @param name 文件名\r\n */\n exportExcelAll(columns, name) {\n let params = this.getParams();\n params.enablePage = false;\n if (this.tableConfig.definitionSql == 2) {\n params.pageNumber = 1;\n params.pageSize = 50000;\n }\n let url = this.tableConfig.definitionSql == 2 ? this.tableConfig.api : '/online/crud/query';\n let method = this.tableConfig.definitionSql == 2 ? this.tableConfig.requestType == '1' ? 'post' : 'get' : 'post';\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.request)(this.http, {\n url: url,\n method: method,\n data: params,\n timeout: 1000 * 90 * 90\n }, false, false).then(({\n data\n }) => {\n let respData = data instanceof Array ? data : data.listData;\n (0,_utils_ExcelUtil__WEBPACK_IMPORTED_MODULE_15__.exportExcel)({\n data: respData,\n name: name,\n columns: columns,\n option: {\n align: this.$table ? this.$table.align : 'center'\n }\n });\n });\n },\n /**\r\n * 内置确认框\r\n * @param content\r\n * @param title\r\n * @param status\r\n * @returns {Promise<\"model\"|\"mask\"|\"close\"|\"confirm\"|\"cancel\"|\"exit\"|\"exist\">}\r\n */\n async confirm(content, title, status) {\n return await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: title,\n status: status\n });\n },\n /**\r\n * 内置调用方法\r\n * @param m\r\n * @param v\r\n * @param d\r\n */\n emits({\n m,\n v,\n d,\n js\n }) {\n if (typeof js === 'string') {\n eval(js);\n } else if (m && this[m]) {\n this[m](v);\n }\n if (d != false) {\n this.customUrl = undefined;\n }\n if (js && typeof js === 'object' && typeof js.callback === 'function') {\n this.executeFunction(js.callback, v);\n } else if (typeof js === 'function') {\n this.executeFunction(js, v);\n }\n },\n /**\r\n * 执行函数\r\n * @param func\r\n * @param v\r\n */\n executeFunction(func, v) {\n if (typeof func !== 'function') return;\n try {\n func.call(this, v);\n } catch (error) {\n console.error('函数执行错误:', error);\n }\n },\n /**\r\n * 设置禁用按钮\r\n * @param ex\r\n */\n setAllBtnDisabled(ex) {\n if (ex) {\n ex = ex.split(\",\");\n } else {\n ex = [];\n }\n for (let toolBtn of this.toolBtn) {\n let disabled = true;\n for (let code of ex) {\n if (toolBtn.code == code) {\n disabled = false;\n }\n }\n toolBtn.disabled = disabled;\n }\n for (let toolBtn of this.operationBtn) {\n let disabled = true;\n for (let code of ex) {\n if (toolBtn.code == code) {\n disabled = false;\n }\n }\n toolBtn.disabled = disabled;\n }\n },\n /**\r\n * 设置工具栏 but\r\n * @param code 编码\r\n * @param key 要设置的key\r\n * @param value 要设置的value\r\n */\n setToolBtn(code, key, value) {\n for (let toolBtn of this.toolBtn) {\n if (toolBtn.code == code) {\n toolBtn[key] = value;\n }\n }\n },\n /**\r\n * 获取工具栏 but\r\n * @param code 编码\r\n * @param key 要设置的key\r\n * @param value 要设置的value\r\n */\n getToolBtn(code) {\n for (let toolBtn of this.toolBtn) {\n if (toolBtn.code == code) {\n return toolBtn;\n }\n }\n },\n /**\r\n * 设置操作按钮 but\r\n * @param code 编码\r\n * @param key 要设置的key\r\n * @param value 要设置的value\r\n */\n setOperationBtn(code, key, value) {\n for (let toolBtn of this.operationBtn) {\n if (toolBtn.code == code) {\n toolBtn[key] = value;\n }\n }\n },\n /**\r\n * 获取修改数据(包括未修改数据)\r\n */\n getUpdateRecords() {\n if (this.$table) {\n return [...this.$table.getInsertRecords(), ...this.$table.getUpdateRecords()];\n }\n },\n /**\r\n * 获取修改数据(包括未修改数据)\r\n */\n getUpdateRecordsRow() {\n let rows = [];\n for (let newRow of this.table.data) {\n rows.push(this.getColumnTableUpdateValue(this.table.columns, newRow));\n }\n return rows;\n },\n /**\r\n * 批量保存\r\n */\n async batchSave(code, content, rows, foreignKey, foreignKeyValue) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n if (rows.length == 0) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"请选数据!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n let list = [];\n let updateList = [];\n let dataSource = this.table.dataSource;\n const srcMap = new Map(dataSource.map(item => [item[this.getUniKey()], item]));\n for (const row of rows) {\n delete row._X_ROW_KEY; //删除_X_ROW_KEY属性\n let rowId = row[this.getUniKey()];\n if (rowId) {\n updateList.push({\n columnAndValueMap: this.getDifferingProperties(row, srcMap.get(row[this.getUniKey()])),\n //更新字段\n whereMap: this.doGetWhereMap(row, this.getUniKey()) //更新条件\n });\n continue;\n }\n let columnTableUpdateValue = this.getColumnTableUpdateValue(this.table.columns, row);\n if (foreignKey) {\n columnTableUpdateValue[foreignKey] = foreignKeyValue ? foreignKeyValue : this.mainId;\n }\n list.push(columnTableUpdateValue);\n }\n if (updateList && updateList.length >= 1) {\n this.doPostAes(code, '/online/crudAes/batchModify', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n list: updateList\n });\n }\n if (list && list.length >= 1) {\n this.doPostAes(code, '/online/crudAes/batchSave', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n tableConfigId: this.tableConfig.tableConfigId,\n columnAndValueListMap: list,\n genIdMap: {\n [this.getUniKey()]: 'uuid'\n }\n });\n }\n },\n /**\r\n * 保存修改\r\n */\n async saveUpdate(code, content) {\n let dataSource = this.table.dataSource;\n const srcMap = new Map(dataSource.map(item => [item[this.getUniKey()], item]));\n let rows = [];\n for (const row of this.getUpdateRecords()) {\n let src = srcMap.get(row[this.getUniKey()]);\n rows.push(this.getDifferingProperties(row, src));\n }\n // console.log('saveUpdate:',rows)\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n if (rows.length == 0) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"请选数据!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n let list = [];\n for (const row of this.getUpdateRecords()) {\n list.push({\n columnAndValueMap: this.getDifferingProperties(row, srcMap.get(row[this.getUniKey()])),\n //更新字段\n whereMap: this.doGetWhereMap(row, this.getUniKey()) //更新条件\n });\n }\n this.doPostAes(code, '/online/crudAes/batchModify', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n list\n });\n // this.doBatchModify('batchModify', \"age\", this.getUniKey(), \"确认修改编辑数据吗?\", this.getUpdateRecords())\n },\n /**\r\n * 获取新增数据\r\n */\n getInsertEvent() {\n if (this.$table) {\n return this.$table.getInsertRecords();\n }\n },\n /**\r\n * 获取删除数据\r\n * @returns {*}\r\n */\n getRemoveEvent() {\n if (this.$table) {\n return this.$table.getRemoveRecords();\n }\n },\n /**\r\n * 获取选中\r\n * @returns {*|*[]|*[]}\r\n */\n getSelectRows() {\n if (this.selectBox == 1) {\n return this.$table.getRadioRecord() ? [this.$table.getRadioRecord()] : [];\n } else if (this.selectBox == 2) {\n return this.$table.getCheckboxRecords(true);\n }\n },\n updateColumn(rows) {\n this.table['show-footer'] = false;\n if (rows && rows instanceof Array) {\n for (let o of this.table.columns) {\n for (let row of rows) {\n if (row.id == o.id) {\n for (let key of Object.keys(row)) {\n o[key] = row[key];\n }\n }\n }\n this.setColumnHide(o);\n this.setFixed(o);\n this.setShowFooter(o);\n }\n }\n let data = this.table.columns.sort((a, b) => {\n return a.sort - b.sort;\n });\n this.doGroupAndCompute();\n this.$table.reloadColumn(data);\n },\n doGroupAndCompute(dataSource) {\n if (dataSource) {\n this.table.dataSource = JSON.parse(JSON.stringify(dataSource));\n }\n if (this.tableConfig.paging != 2) {\n if (dataSource != undefined) {\n this.table.data = dataSource;\n }\n return;\n }\n let groupKey = [];\n let comValue = [];\n for (let column of this.table.columns) {\n if (column.visible && column.groupToOtherProp == 1) {\n groupKey.push(column.field);\n }\n if (column.groupTotalToOtherProp) {\n comValue.push(column.field + \":\" + column.groupTotalToOtherProp);\n }\n }\n if (dataSource == undefined) {\n dataSource = this.table.dataSource;\n }\n if (groupKey.length != 0 & comValue.length != 0) {\n dataSource = (0,_utils_groupCompute__WEBPACK_IMPORTED_MODULE_17__.groupAndCompute)(groupKey, comValue, dataSource);\n }\n this.table.data = dataSource;\n this.$table.reloadData(this.table.data);\n },\n getDifferingProperties1(tar, src) {\n const differingProperties = {};\n // 假设两个对象都有相同的属性\n for (const key in tar) {\n if (Object.hasOwn(tar, key) && Object.hasOwn(src, key)) {\n if (tar[key] !== src[key]) {\n differingProperties[key] = tar[key]; // 可以选择返回obj2的值,或创建一个数组存放两个值\n }\n }\n }\n return differingProperties;\n },\n getDifferingProperties(tar, src) {\n // 1. 边界处理:非法输入转为空对象\n if (src == null || typeof src !== 'object') src = {};\n if (tar == null || typeof tar !== 'object') tar = {};\n const differingProperties = {};\n\n // 2. 遍历 tar 的自有属性\n for (const key in tar) {\n if (!Object.hasOwn(tar, key)) continue;\n\n // 3. 检查 src 是否有同名自有属性\n if (Object.hasOwn(src, key)) {\n // 4. 深度比较值差异\n if (!this.isEqual(tar[key], src[key])) {\n // 5. 记录差异(存储双方值)\n differingProperties[key] = tar[key];\n }\n }\n // 可选:将 tar 存在而 src 不存在的属性视为差异?\n else {\n differingProperties[key] = tar[key];\n }\n }\n return differingProperties;\n },\n isEqual(a, b) {\n if (a === b) return true;\n if (Number.isNaN(a) && Number.isNaN(b)) return true; // 处理 NaN\n if (typeof a === 'object' && typeof b === 'object') {\n // 简化版深层比较(实际项目建议使用 lodash.isEqual )\n return JSON.stringify(a) === JSON.stringify(b);\n }\n return false;\n }\n }\n};\n\n//# sourceURL=webpack://olp-table/./src/mixins/VTMixin/DefaultMethods.js?");
|
|
12767
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DefaultMethods: function() { return /* binding */ DefaultMethods; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_some_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.some.js */ \"./node_modules/core-js/modules/es.iterator.some.js\");\n/* harmony import */ var core_js_modules_es_iterator_some_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_some_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_set_difference_v2_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.set.difference.v2.js */ \"./node_modules/core-js/modules/es.set.difference.v2.js\");\n/* harmony import */ var core_js_modules_es_set_difference_v2_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_difference_v2_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_set_intersection_v2_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.set.intersection.v2.js */ \"./node_modules/core-js/modules/es.set.intersection.v2.js\");\n/* harmony import */ var core_js_modules_es_set_intersection_v2_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_intersection_v2_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_es_set_is_disjoint_from_v2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.set.is-disjoint-from.v2.js */ \"./node_modules/core-js/modules/es.set.is-disjoint-from.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_disjoint_from_v2_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_is_disjoint_from_v2_js__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_es_set_is_subset_of_v2_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.set.is-subset-of.v2.js */ \"./node_modules/core-js/modules/es.set.is-subset-of.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_subset_of_v2_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_is_subset_of_v2_js__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_es_set_is_superset_of_v2_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/es.set.is-superset-of.v2.js */ \"./node_modules/core-js/modules/es.set.is-superset-of.v2.js\");\n/* harmony import */ var core_js_modules_es_set_is_superset_of_v2_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_is_superset_of_v2_js__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var core_js_modules_es_set_symmetric_difference_v2_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.set.symmetric-difference.v2.js */ \"./node_modules/core-js/modules/es.set.symmetric-difference.v2.js\");\n/* harmony import */ var core_js_modules_es_set_symmetric_difference_v2_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_symmetric_difference_v2_js__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var core_js_modules_es_set_union_v2_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/es.set.union.v2.js */ \"./node_modules/core-js/modules/es.set.union.v2.js\");\n/* harmony import */ var core_js_modules_es_set_union_v2_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_union_v2_js__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _utils_tree__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/utils/tree */ \"./src/utils/tree.js\");\n/* harmony import */ var _utils_message__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/utils/message */ \"./src/utils/message.js\");\n/* harmony import */ var _utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/utils/http/httpUtils */ \"./src/utils/http/httpUtils.js\");\n/* harmony import */ var _utils_ExcelUtil__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @/utils/ExcelUtil */ \"./src/utils/ExcelUtil.js\");\n/* harmony import */ var vxe_table__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! vxe-table */ \"vxe-table\");\n/* harmony import */ var vxe_table__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(vxe_table__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _utils_groupCompute__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @/utils/groupCompute */ \"./src/utils/groupCompute.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst message = (0,_utils_message__WEBPACK_IMPORTED_MODULE_13__.useMessage)(); // 消息弹窗\nconst DefaultMethods = {\n methods: {\n //删除主子表 支持一个主表多个子表\n async doRemoveMainAndSub({\n obj,\n row\n }, subTableName, whereObj, subForeignKey, content) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n //为了兼容以前的写法subForeignKey是对象的话直接转换成字符串\n if (subForeignKey instanceof Object) {\n for (let key of Object.keys(subForeignKey)) {\n subForeignKey = subForeignKey[key];\n }\n }\n this.doPostAes(obj.code, '/online/crudAes/deleteMainAndSubs', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n subTableName: subTableName,\n //tableName1,tableName2\n whereMap: this.doGetWhereMap(row, whereObj),\n //更新条件\n subForeignKey: subForeignKey // fk1,fk2\n });\n },\n getUniKey() {\n if (!this.tableConfig.cardKey) {\n return this.formMainList.edit.formMain.updateKey.trim();\n }\n return this.tableConfig.cardKey.trim();\n },\n /**\r\n * 操作列保存:直接在操作按钮的自定义事件加入代码:this.doOneSave(o,'是否要保存数据')\r\n * @param obj 单击按钮的对象\r\n * @param row 单击当前行\r\n * @param content 提示内容\r\n * @returns {Promise<void>}\r\n */\n async doOneSave({\n obj,\n row\n }, content) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n if (!row) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"数据为空!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n let dataSource = this.table.dataSource;\n if (!dataSource) {\n return;\n }\n let newRow = JSON.parse(JSON.stringify(row));\n try {\n newRow[this.getUniKey()] = '';\n } catch (e) {}\n let params = {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n genIdMap: {\n [this.getUniKey()]: 'uuid'\n },\n columnAndValueMap: this.getColumnTableUpdateValue(this.table.columns, newRow)\n };\n this.doPostAes(obj.code, '/online/crudAes/save', params);\n },\n /**\r\n * 操作列更新:直接在操作按钮的自定义事件加入代码:this.doOneModify(o,'数据库更新字段=数据值,数据库更新字段:列字段,数据库更新字段','数据库更新条件','提示内容')\r\n *\r\n * @param obj 单击按钮的对象\r\n * @param row 单击当前行\r\n * @param updateObj\r\n * @param whereObj\r\n * @param content\r\n * @returns {Promise<void>}\r\n */\n async doOneModify({\n obj,\n row\n }, updateObj, whereObj, content) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n let newRow = JSON.parse(JSON.stringify(row));\n this.doPostAes(obj.code, '/online/crudAes/modify', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n columnAndValueMap: this.doGetColumnAndValueMap(newRow, updateObj),\n //更新字段\n whereMap: this.doGetWhereMap(newRow, whereObj) //更新条件\n });\n },\n /**\r\n * 批量保存数据(包含更新)\r\n * @param code\r\n * @param updateObj\r\n * @param whereObj\r\n * @param content\r\n * @param updateRecords 如果为空,获取全部选中数据\r\n * @returns {Promise<void>}\r\n */\n async doBatchSave(code, content, rows, tableKey, genIdMap) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n if (rows == undefined) {\n rows = this.getUpdateRecordsRow();\n }\n if (rows.length == 0) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"无需保存数据!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n if (tableKey == undefined) {\n tableKey = this.tableConfig.cardKey;\n }\n if (genIdMap == undefined) {\n genIdMap = {};\n for (let tableKeyElement of tableKey.split(\",\")) {\n genIdMap[tableKeyElement.toString()] = 'uuid';\n }\n }\n this.doPostAes(code, '/online/crudAes/batchSave', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n tableConfigId: this.tableConfig.tableConfigId,\n columnAndValueListMap: rows,\n tableKey: tableKey,\n genIdMap: genIdMap\n });\n },\n /**\r\n * 批量更新\r\n * @param code\r\n * @param updateObj\r\n * @param whereObj\r\n * @param content\r\n * @param updateRecords 如果为空,获取全部选中数据\r\n * @returns {Promise<void>}\r\n */\n async doBatchModify(code, updateObj, whereObj, content, updateRecords) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n let rows = updateRecords;\n if (!updateRecords || updateRecords.length <= 0) {\n rows = this.getSelectRows();\n }\n if (rows.length == 0) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"请选数据!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n let list = [];\n for (const row of rows) {\n list.push({\n columnAndValueMap: this.doGetColumnAndValueMap(row, updateObj),\n //更新字段\n whereMap: this.doGetWhereMap(row, whereObj) //更新条件\n });\n }\n this.doPostAes(code, '/online/crudAes/batchModify', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n list\n });\n },\n /**\r\n * 直接发送post请求\r\n * @param code\r\n * @param url\r\n * @param params\r\n */\n doPostAes(code, url, params, noQuery) {\n if (code != undefined) {\n this.loading[code] = true;\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, url, params).then(r => {\n if (r != false && noQuery != false) {\n this.query();\n }\n }).finally(() => {\n if (code != undefined) {\n this.loading[code] = false;\n }\n });\n },\n /**\r\n * 根据列配置获取数据库表更新数据\r\n * @param column\r\n * @param formData\r\n * @returns {{}}\r\n */\n getTableUpdateValue(column, formData) {\n let columnAndValueMap = {};\n for (let {\n prop,\n tableField\n } of column) {\n if (!tableField || tableField != '1') {\n continue;\n }\n let value = formData[prop];\n if (value) {\n if (value instanceof String) {\n value = value.trim();\n }\n columnAndValueMap[prop] = value;\n }\n }\n return columnAndValueMap;\n },\n /**\r\n * 获取表格更新列值\r\n * @param column\r\n * @param formData\r\n * @returns {{}}\r\n */\n getColumnTableUpdateValue(column, formData) {\n let columnAndValueMap = {};\n for (let {\n field,\n tableSaveToOtherProp\n } of column) {\n // 勾选,不属于数据库表字段\n if (tableSaveToOtherProp && tableSaveToOtherProp == '1') {\n continue;\n }\n let value = formData[field];\n if (value) {\n if (value instanceof String) {\n value = value.trim();\n }\n columnAndValueMap[field] = value;\n }\n }\n return columnAndValueMap;\n },\n /**\r\n * 获取row更新值\r\n * @param row\r\n * @param updateObj 更新对象,允许为:\"name='xx',name\" 如果name=xx,数据直接赋值,如果没有=,则使用row的值\r\n * @returns {{}}\r\n */\n doGetColumnAndValueMap(row, updateObj) {\n let columnAndValueMap = {};\n for (let key of updateObj.split(\",\")) {\n let k = key.split(\"=\");\n if (k.length == 2) {\n columnAndValueMap[k[0]] = k[1];\n } else {\n k = key.split(\":\");\n columnAndValueMap[k[k.length - 1]] = row[k[0]];\n }\n }\n return columnAndValueMap;\n },\n doGetColumnAndValueAny(rows, updateObj) {\n if (!updateObj) {\n return rows;\n }\n let list = [];\n let keys = [];\n let hasKey = '';\n for (const row of rows) {\n keys = keys.length >= 1 ? keys : Object.keys(row);\n if (!hasKey) {\n hasKey = this.hasUpdateKey(keys, updateObj);\n }\n if (hasKey) {\n Object.assign(row, this.doGetColumnAndValueMap(row, updateObj));\n }\n list.push(row);\n }\n return list;\n },\n hasUpdateKey(keys, updateObj) {\n for (const key of keys) {\n if (updateObj.indexOf(key) >= 0) {\n return '1';\n }\n }\n return '0';\n },\n doGetWhereMap(row, whereObj) {\n let whereMap = {};\n for (let key of whereObj.split(\",\")) {\n let k = key.split(\":\");\n //className:class_name row:{className:'xxx'} whereMap:{class_name}\n whereMap[k[k.length - 1]] = row[k[0]];\n }\n return whereMap;\n },\n /**\r\n * 内置批量删除方法\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n batchRemove() {\n this.confirm(\"您选中\" + this.getSelectRows().length + '条数据,删除后不可恢复,您确定要删除吗?', '删除提示', 'error').then(type => {\n if (type != \"cancel\") {\n // 1. 子数据存在性校验\n const hasChildData = this.getSelectRows().some(row => row?.children);\n if (hasChildData) {\n return message.error('存在包含子数据的记录,禁止删除!');\n }\n // 2. 分离有ID和无ID数据\n const rowsWithId = [];\n const rowsWithoutId = [];\n this.getSelectRows().forEach(row => {\n this.hasValidId(row) ? rowsWithId.push(row) : rowsWithoutId.push(row);\n });\n\n // 3. 处理无ID数据(前端直接移除)\n if (rowsWithoutId.length > 0) {\n rowsWithoutId.forEach(row => this.removeFromTableByReference(row));\n }\n // 修改点:如果没有有ID的数据,直接返回\n if (rowsWithId.length === 0) return;\n let list = [];\n for (let r of this.getSelectRows()) {\n let p = JSON.parse(JSON.stringify(this.deleteParameter));\n delete p['$parentId'];\n for (let key of Object.keys(p)) {\n p[key] = r[key];\n }\n list.push(p);\n }\n this.loading['batchDelete'] = true;\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, '/online/crudAes/batchDelete', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n list: list\n }).then(r => {\n if (r != false) {\n this.query();\n }\n }).finally(() => {\n this.loading['batchDelete'] = false;\n });\n }\n });\n },\n /**\r\n * 内置重置方法\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n resetQuery() {\n for (let k of Object.keys(this.table.formConfig.data)) {\n this.table.formConfig.data[k] = undefined;\n }\n for (let k of Object.keys(this.parameter)) {\n this.parameter[k] = undefined;\n }\n this.initDefaultValue();\n this.query();\n },\n /**\r\n * 内置根据参数查询\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n queryParams(parameter) {\n if (parameter) {\n Object.assign(this.parameter, parameter);\n }\n return this.query();\n },\n /**\r\n * 内置查询\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n query() {\n let axios = undefined;\n if (this.tableConfig.definitionSql == 2) {\n if (this.tableConfig.requestType == '1') {\n axios = (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.post)(this.http, this.tableConfig.api, this.getParams(), false, false);\n } else {\n axios = (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.get)(this.http, this.tableConfig.api, this.getParams(), false);\n }\n } else if (this.tableConfig.aes == 1) {\n axios = (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, '/online/crudAes/query', this.getParams(), false, false);\n } else {\n axios = (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.post)(this.http, '/online/crud/query', this.getParams(), false, false);\n }\n this.doQuery(axios);\n },\n async doSetData(data) {\n let respData = data instanceof Array ? data : data.listData;\n const dictRequests = [];\n for (let column of this.table.columns) {\n if (column.visible == 1 && column.params && column.params.tableSelect) {\n dictRequests.push(this.fetchAndMapDictData(respData, column));\n }\n }\n await Promise.all(dictRequests);\n if (this.table.treeConfig) {\n respData = (0,_utils_tree__WEBPACK_IMPORTED_MODULE_12__.handleTree)(respData, this.table.treeConfig.treeId, this.table.treeConfig.treeParentId);\n }\n this.table.data = respData;\n this.doGroupAndCompute(respData);\n this.pagination.total = data.count;\n this.doEvent(\"queryAfter\");\n },\n async doQuery(axios) {\n if (this.loading['select']) {\n return;\n }\n this.table.loading = true;\n this.loading['select'] = true;\n await axios.then(async ({\n data,\n code,\n msg\n }) => {\n if (code != 200 && code != 0) {\n message.error(msg);\n return;\n }\n this.doSetData(data);\n }).finally(() => {\n this.table.loading = false;\n this.loading['select'] = false;\n });\n },\n getPKArrays(value) {\n let uniqueIds = new Set();\n //字段值不为空\n if (value != undefined && value.toString().trim().length > 0) {\n try {\n // 尝试解析 JSON 字符串(如 \"[1,2]\" → [1, 2])\n let parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n for (let parsedElement of parsed) {\n uniqueIds.add(parsedElement.toString().trim());\n }\n } else {\n uniqueIds.add(String(value).trim());\n }\n } catch {\n if (value.includes(',')) {\n for (let v of value.trim().split(',')) {\n uniqueIds.add(String(v).trim());\n }\n } else {\n uniqueIds.add(String(value).trim());\n }\n }\n }\n return uniqueIds;\n },\n /**\r\n * 根据动态配置获取并映射字典数据\r\n * @param {Array} typeField - 动态列配置(如 departmentColumnsConfig)\r\n */\n async fetchAndMapDictData(data, column) {\n let uniqueIds = new Set();\n for (let item of data) {\n let value = item[column.field];\n uniqueIds.add(...this.getPKArrays(value));\n }\n if (!column.params) {\n column.params = {\n tableDataObj: {}\n };\n } else if (column.params.tableDataObj) {\n for (let key of Object.keys(column.params.tableDataObj)) {\n uniqueIds.delete(key);\n }\n } else {\n column.params.tableDataObj = {};\n }\n if (uniqueIds.size != 0) {\n // 构造请求参数\n const params = {\n id: column.params.uuid,\n theme: \"t1\",\n enablePage: false,\n queryParameterMapIn: {}\n };\n params.queryParameterMapIn[column.params.key] = Array.from(uniqueIds);\n try {\n return (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, '/online/crudAes/query', params, false, false).then(({\n data\n }) => {\n // 处理API返回数据\n if (data?.listData?.length > 0) {\n data.listData.forEach(item => {\n column.params.tableDataObj[item[column.params.key]] = item[column.params.label];\n });\n }\n });\n } catch (error) {\n console.error('数据请求失败:', params, error);\n return true;\n }\n } else {\n return true;\n }\n },\n /**\r\n * 内置删除方法\r\n * @param o\r\n * @returns {Promise<void>}\r\n */\n remove(o) {\n let {\n row\n } = o;\n this.confirm('数据删除后不可恢复,您确定要删除吗?', '删除提示', 'error').then(type => {\n if (type != \"cancel\") {\n // 校验是否存在子数据\n if (row && row.children) {\n return message.error('存在包含子数据的记录,禁止删除!');\n }\n // 判断是否存在有效ID(兼容字符串和数字类型ID)\n const hasValidId = this.hasValidId(row);\n if (!hasValidId) {\n // 通过对象引用删除(无ID时使用)\n return this.removeFromTableByReference(row);\n }\n let params = {};\n for (let key of Object.keys(this.deleteParameter)) {\n if (key != '$parentId') {\n params[key] = row[key];\n }\n }\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.postAes)(this.http, '/online/crudAes/delete', {\n where: params,\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable\n }).then(r => {\n if (r != false) {\n this.query();\n }\n });\n }\n });\n },\n /**\r\n * 有有效id\r\n * @param row\r\n * @returns {boolean}\r\n */\n hasValidId(row) {\n const idKey = this.getDeleteId(this.deleteParameter);\n const idValue = row[idKey];\n console.log('hasValidId', idKey, idValue);\n return idValue !== undefined && idValue !== null && idValue !== '';\n },\n /**\r\n * 通过对象引用删除(无ID时使用)\r\n * @param o\r\n */\n removeFromTableByReference(o) {\n const index = this.table.data.indexOf(o);\n if (index !== -1) {\n this.table.data.splice(index, 1);\n } else {\n console.error(\"未找到要删除的数据项\");\n }\n },\n /**\r\n * 获取查询参数\r\n * @returns {{enablePage: OTMixinBodyMethods.methods.pagination.enabled, theme: OTMixinBodyMethods.methods.theme, id: OTMixinBodyMethods.methods.uuid}}\r\n */\n getParams() {\n if (this.tableConfig.definitionSql == 2) {\n let params = JSON.parse(JSON.stringify(this.table.formConfig.data));\n if (params.enablePage) {\n params.pageNumber = this.pagination.currentPage;\n params.pageSize = this.pagination.pageSize;\n }\n return {\n ...this.parameter,\n ...params\n };\n }\n let params = {\n id: this.uuid,\n theme: this.theme,\n enablePage: this.pagination.enabled\n };\n if (params.enablePage) {\n params.pageNumber = this.pagination.currentPage;\n params.pageSize = this.pagination.pageSize;\n }\n let paramsKey = [];\n for (let o of this.table.formConfig.items) {\n let value = this.table.formConfig.data[o.key];\n if (value == undefined || value == '' || o.itemRender && o.itemRender.name == '$buttons') {\n continue;\n }\n let key = o.key.replace(/\\$/g, '');\n //文本域\n if (o.itemRender && o.itemRender.name == \"textarea\" && o.type != \"9\") {\n let values = value instanceof Array ? value : value.split(\"\\n\");\n if (values.length != 0) {\n let queryParameterMapIn = [];\n for (let v of values) {\n if (v != undefined && v.toString().trim() != '') {\n queryParameterMapIn.push(v);\n }\n }\n if (queryParameterMapIn.length != 0) {\n if (!params['queryParameterMapIn']) {\n params['queryParameterMapIn'] = {};\n }\n params['queryParameterMapIn'][key] = queryParameterMapIn;\n paramsKey.push(key);\n } else if (params['queryParameterMapIn']) {\n delete params['queryParameterMapIn'][key];\n }\n }\n } else if (value.toString().trim() != '') {\n if (!params['queryParameterListAnd']) {\n params['queryParameterListAnd'] = [];\n }\n let values = value instanceof Array ? value : value.split(\",\");\n if (o.type == \"98\") {\n params['queryParameterListAnd'].push({\n value: values[0],\n key: key,\n type: 5,\n toDate: o.toDate\n });\n params['queryParameterListAnd'].push({\n value: values[1],\n key: key,\n type: 6,\n toDate: o.toDate\n });\n paramsKey.push(key);\n } else if (!(values instanceof Array)) {\n let isNumber = o.selectDom == 7;\n o.value = value;\n //type 查询类型 默认等于1--> 1:= 2:!= 3: > 4:< 5: >= 6: <= 7:like '%value' 8:like '%value%' 9:like 'value%'\n //replace(/\\$/g, '') 目的解决范围\n let obj = {\n value: isNumber ? Number(value) : value,\n key: key,\n type: o.type,\n toDate: o.toDate\n };\n params['queryParameterListAnd'].push(obj);\n paramsKey.push(key);\n } else {\n let isNumber = o.selectDom == 7;\n for (let v of values) {\n if (!v) {\n continue;\n }\n let obj = {\n value: isNumber ? Number(v) : v,\n key: key,\n type: o.type,\n toDate: o.toDate\n };\n params['queryParameterListAnd'].push(obj);\n paramsKey.push(key);\n }\n }\n }\n }\n for (let key of Object.keys(this.parameter)) {\n let v = this.parameter[key];\n if (paramsKey.indexOf(key) === -1 && v != undefined && v != '') {\n if (v instanceof Array) {\n if (!params['queryParameterMapIn']) {\n params['queryParameterMapIn'] = {};\n }\n params['queryParameterMapIn'][key] = v;\n } else {\n if (!params['queryParameterListAnd']) {\n params['queryParameterListAnd'] = [];\n }\n params['queryParameterListAnd'].push({\n key: key,\n value: v\n });\n }\n }\n }\n if (this.orderByColumns.length != 0) {\n params['orderBy'] = this.orderByColumns;\n }\n params.authVo = {\n \"tableAliasFiled\": this.tableConfig.tableAliasFiled,\n \"departmentFiled\": this.tableConfig.departmentFiled,\n \"userFiled\": this.tableConfig.userFiled\n };\n this.doEvent(\"queryBefore\", params);\n return params;\n },\n doEvent(name, params) {\n if (this.events[name]) {\n setTimeout(() => {\n this.$nextTick(() => {\n this.events[name](params);\n });\n }, 100);\n }\n },\n /**\r\n * 导出数据\r\n * @param columns 自定义导出字段 t_id\r\n * @param selectData 选择数据: 当前页数据、勾选行数据、全部数据\r\n * @param name\r\n */\n exportData({\n exportParam,\n cancelEvent\n }) {\n let {\n columns,\n selectData,\n name\n } = exportParam;\n for (let column of this.table.columns) {\n for (let c of columns) {\n if (column.field === c.field && column.params) {\n c.params = column.params;\n }\n }\n }\n let data = [];\n switch (selectData) {\n case '1':\n // 当前页\n data = this.table?.data;\n break;\n case '2':\n // 勾选\n data = this.getSelectRows();\n if (!data || data.length == 0) return message.error('勾选行数据为空!');\n break;\n case '3':\n // 全部数据\n this.exportExcelAll(columns, name);\n break;\n default:\n data = this.table.data;\n break;\n }\n if (selectData != '3') {\n (0,_utils_ExcelUtil__WEBPACK_IMPORTED_MODULE_15__.exportExcel)({\n data: data,\n name: name,\n columns: columns,\n option: {\n align: this.$table ? this.$table.align : 'center'\n }\n });\n }\n cancelEvent();\n },\n /**\r\n * 全部数据导出\r\n * @param fields 自定义导出字段\r\n * @param name 文件名\r\n */\n exportExcelAll(columns, name) {\n let params = this.getParams();\n params.enablePage = false;\n if (this.tableConfig.definitionSql == 2) {\n params.pageNumber = 1;\n params.pageSize = 50000;\n }\n let url = this.tableConfig.definitionSql == 2 ? this.tableConfig.api : '/online/crud/query';\n let method = this.tableConfig.definitionSql == 2 ? this.tableConfig.requestType == '1' ? 'post' : 'get' : 'post';\n (0,_utils_http_httpUtils__WEBPACK_IMPORTED_MODULE_14__.request)(this.http, {\n url: url,\n method: method,\n data: params,\n timeout: 1000 * 90 * 90\n }, false, false).then(({\n data\n }) => {\n let respData = data instanceof Array ? data : data.listData;\n (0,_utils_ExcelUtil__WEBPACK_IMPORTED_MODULE_15__.exportExcel)({\n data: respData,\n name: name,\n columns: columns,\n option: {\n align: this.$table ? this.$table.align : 'center'\n }\n });\n });\n },\n /**\r\n * 内置确认框\r\n * @param content\r\n * @param title\r\n * @param status\r\n * @returns {Promise<\"model\"|\"mask\"|\"close\"|\"confirm\"|\"cancel\"|\"exit\"|\"exist\">}\r\n */\n async confirm(content, title, status) {\n return await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: title,\n status: status\n });\n },\n /**\r\n * 内置调用方法\r\n * @param m\r\n * @param v\r\n * @param d\r\n */\n emits({\n m,\n v,\n d,\n js\n }) {\n if (typeof js === 'string') {\n eval(js);\n } else if (m && this[m]) {\n this[m](v);\n }\n if (d != false) {\n this.customUrl = undefined;\n }\n if (js && typeof js === 'object' && typeof js.callback === 'function') {\n this.executeFunction(js.callback, v);\n } else if (typeof js === 'function') {\n this.executeFunction(js, v);\n }\n },\n /**\r\n * 执行函数\r\n * @param func\r\n * @param v\r\n */\n executeFunction(func, v) {\n if (typeof func !== 'function') return;\n try {\n func.call(this, v);\n } catch (error) {\n console.error('函数执行错误:', error);\n }\n },\n /**\r\n * 设置禁用按钮\r\n * @param ex\r\n */\n setAllBtnDisabled(ex) {\n if (ex) {\n ex = ex.split(\",\");\n } else {\n ex = [];\n }\n for (let toolBtn of this.toolBtn) {\n let disabled = true;\n for (let code of ex) {\n if (toolBtn.code == code) {\n disabled = false;\n }\n }\n toolBtn.disabled = disabled;\n }\n for (let toolBtn of this.operationBtn) {\n let disabled = true;\n for (let code of ex) {\n if (toolBtn.code == code) {\n disabled = false;\n }\n }\n toolBtn.disabled = disabled;\n }\n },\n /**\r\n * 设置工具栏 but\r\n * @param code 编码\r\n * @param key 要设置的key\r\n * @param value 要设置的value\r\n */\n setToolBtn(code, key, value) {\n for (let toolBtn of this.toolBtn) {\n if (toolBtn.code == code) {\n toolBtn[key] = value;\n }\n }\n },\n /**\r\n * 获取工具栏 but\r\n * @param code 编码\r\n * @param key 要设置的key\r\n * @param value 要设置的value\r\n */\n getToolBtn(code) {\n for (let toolBtn of this.toolBtn) {\n if (toolBtn.code == code) {\n return toolBtn;\n }\n }\n },\n /**\r\n * 设置操作按钮 but\r\n * @param code 编码\r\n * @param key 要设置的key\r\n * @param value 要设置的value\r\n */\n setOperationBtn(code, key, value) {\n for (let toolBtn of this.operationBtn) {\n if (toolBtn.code == code) {\n toolBtn[key] = value;\n }\n }\n },\n /**\r\n * 获取修改数据(包括未修改数据)\r\n */\n getUpdateRecords() {\n if (this.$table) {\n return [...this.$table.getInsertRecords(), ...this.$table.getUpdateRecords()];\n }\n },\n /**\r\n * 获取修改数据(包括未修改数据)\r\n */\n getUpdateRecordsRow() {\n let rows = [];\n for (let newRow of this.table.data) {\n rows.push(this.getColumnTableUpdateValue(this.table.columns, newRow));\n }\n return rows;\n },\n /**\r\n * 批量保存\r\n */\n async batchSave(code, content, rows, foreignKey, foreignKeyValue) {\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n if (rows.length == 0) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"请选数据!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n let list = [];\n let updateList = [];\n let dataSource = this.table.dataSource;\n const srcMap = new Map(dataSource.map(item => [item[this.getUniKey()], item]));\n for (const row of rows) {\n delete row._X_ROW_KEY; //删除_X_ROW_KEY属性\n let rowId = row[this.getUniKey()];\n if (rowId) {\n updateList.push({\n columnAndValueMap: this.getDifferingProperties(row, srcMap.get(row[this.getUniKey()])),\n //更新字段\n whereMap: this.doGetWhereMap(row, this.getUniKey()) //更新条件\n });\n continue;\n }\n let columnTableUpdateValue = this.getColumnTableUpdateValue(this.table.columns, row);\n if (foreignKey) {\n columnTableUpdateValue[foreignKey] = foreignKeyValue ? foreignKeyValue : this.mainId;\n }\n list.push(columnTableUpdateValue);\n }\n if (updateList && updateList.length >= 1) {\n this.doPostAes(code, '/online/crudAes/batchModify', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n list: updateList\n });\n }\n if (list && list.length >= 1) {\n this.doPostAes(code, '/online/crudAes/batchSave', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n tableConfigId: this.tableConfig.tableConfigId,\n columnAndValueListMap: list,\n genIdMap: {\n [this.getUniKey()]: 'uuid'\n }\n });\n }\n },\n /**\r\n * 保存修改\r\n */\n async saveUpdate(code, content) {\n let dataSource = this.table.dataSource;\n const srcMap = new Map(dataSource.map(item => [item[this.getUniKey()], item]));\n let rows = [];\n for (const row of this.getUpdateRecords()) {\n let src = srcMap.get(row[this.getUniKey()]);\n rows.push(this.getDifferingProperties(row, src));\n }\n // console.log('saveUpdate:',rows)\n if (content) {\n let type = await vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.confirm({\n content: content,\n title: '提示',\n status: 'warning'\n });\n if (type == \"cancel\") {\n return;\n }\n }\n if (rows.length == 0) {\n vxe_table__WEBPACK_IMPORTED_MODULE_16___default().modal.message({\n content: \"请选数据!\",\n title: '提示',\n status: 'error'\n });\n return;\n }\n let list = [];\n for (const row of this.getUpdateRecords()) {\n list.push({\n columnAndValueMap: this.getDifferingProperties(row, srcMap.get(row[this.getUniKey()])),\n //更新字段\n whereMap: this.doGetWhereMap(row, this.getUniKey()) //更新条件\n });\n }\n this.doPostAes(code, '/online/crudAes/batchModify', {\n dbName: this.tableConfig.dbName,\n tableName: this.tableConfig.mainTable,\n list\n });\n // this.doBatchModify('batchModify', \"age\", this.getUniKey(), \"确认修改编辑数据吗?\", this.getUpdateRecords())\n },\n /**\r\n * 获取新增数据\r\n */\n getInsertEvent() {\n if (this.$table) {\n return this.$table.getInsertRecords();\n }\n },\n /**\r\n * 获取删除数据\r\n * @returns {*}\r\n */\n getRemoveEvent() {\n if (this.$table) {\n return this.$table.getRemoveRecords();\n }\n },\n /**\r\n * 获取选中\r\n * @returns {*|*[]|*[]}\r\n */\n getSelectRows() {\n if (this.selectBox == 1) {\n return this.$table.getRadioRecord() ? [this.$table.getRadioRecord()] : [];\n } else if (this.selectBox == 2) {\n return this.$table.getCheckboxRecords(true);\n }\n },\n updateColumn(rows) {\n this.table['show-footer'] = false;\n if (rows && rows instanceof Array) {\n for (let o of this.table.columns) {\n for (let row of rows) {\n if (row.id == o.id) {\n for (let key of Object.keys(row)) {\n o[key] = row[key];\n }\n }\n }\n this.setColumnHide(o);\n this.setFixed(o);\n this.setShowFooter(o);\n }\n }\n let data = this.table.columns.sort((a, b) => {\n return a.sort - b.sort;\n });\n this.doGroupAndCompute();\n this.$table.reloadColumn(data);\n },\n doGroupAndCompute(dataSource) {\n if (dataSource) {\n this.table.dataSource = JSON.parse(JSON.stringify(dataSource));\n }\n if (this.tableConfig.paging != 2) {\n if (dataSource != undefined) {\n this.table.data = dataSource;\n }\n return;\n }\n let groupKey = [];\n let comValue = [];\n for (let column of this.table.columns) {\n if (column.visible && column.groupToOtherProp == 1) {\n groupKey.push(column.field);\n }\n if (column.groupTotalToOtherProp) {\n comValue.push(column.field + \":\" + column.groupTotalToOtherProp);\n }\n }\n if (dataSource == undefined) {\n dataSource = this.table.dataSource;\n }\n if (groupKey.length != 0 & comValue.length != 0) {\n dataSource = (0,_utils_groupCompute__WEBPACK_IMPORTED_MODULE_17__.groupAndCompute)(groupKey, comValue, dataSource);\n }\n this.table.data = dataSource;\n this.$table.reloadData(this.table.data);\n },\n getDifferingProperties1(tar, src) {\n const differingProperties = {};\n // 假设两个对象都有相同的属性\n for (const key in tar) {\n if (Object.hasOwn(tar, key) && Object.hasOwn(src, key)) {\n if (tar[key] !== src[key]) {\n differingProperties[key] = tar[key]; // 可以选择返回obj2的值,或创建一个数组存放两个值\n }\n }\n }\n return differingProperties;\n },\n getDifferingProperties(tar, src) {\n // 1. 边界处理:非法输入转为空对象\n if (src == null || typeof src !== 'object') src = {};\n if (tar == null || typeof tar !== 'object') tar = {};\n const differingProperties = {};\n\n // 2. 遍历 tar 的自有属性\n for (const key in tar) {\n if (!Object.hasOwn(tar, key)) continue;\n\n // 3. 检查 src 是否有同名自有属性\n if (Object.hasOwn(src, key)) {\n // 4. 深度比较值差异\n if (!this.isEqual(tar[key], src[key])) {\n // 5. 记录差异(存储双方值)\n differingProperties[key] = tar[key];\n }\n }\n // 可选:将 tar 存在而 src 不存在的属性视为差异?\n else {\n differingProperties[key] = tar[key];\n }\n }\n return differingProperties;\n },\n isEqual(a, b) {\n if (a === b) return true;\n if (Number.isNaN(a) && Number.isNaN(b)) return true; // 处理 NaN\n if (typeof a === 'object' && typeof b === 'object') {\n // 简化版深层比较(实际项目建议使用 lodash.isEqual )\n return JSON.stringify(a) === JSON.stringify(b);\n }\n return false;\n }\n }\n};\n\n//# sourceURL=webpack://olp-table/./src/mixins/VTMixin/DefaultMethods.js?");
|
|
12768
12768
|
|
|
12769
12769
|
/***/ }),
|
|
12770
12770
|
|