rklink-dev 1.0.3 → 1.0.4
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/dist/rklink-dev/static/libs/base/css/app.css.map +1 -1
- package/package.json +1 -1
- package/static/libs/base/css/app.css.map +1 -1
- package/dist/rklink-dev/static/libs/base/js/app.js +0 -19
- package/dist/rklink-dev/static/libs/base/js/app.js.map +0 -1
- package/static/libs/base/js/app.js +0 -19
- package/static/libs/base/js/app.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["D:/_work/mftcc-platform/mftcc-base-npm/src/components/src/components/contextmenu.vue","contextmenu.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/dialog/src/components/dialog/mftccDialogCheckbox.vue","mftccDialogCheckbox.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/dialog/src/components/dialog/mftccDialogRadio.vue","mftccDialogRadio.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/dialog/src/components/dialog/mftccDialogTable.vue","mftccDialogTable.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/dialog/src/components/dialog/mftccDialogTree.vue","mftccDialogTree.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/flowable/src/components/flowable/timeLine.vue","timeLine.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/flowable/src/components/flowable/wkfUserDialog.vue","wkfUserDialog.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/src/components/mftccIframe.vue","mftccIframe.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/flowable/src/components/flowable/appDetail.vue","appDetail.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/flowable/src/components/flowable/bizTimeLine.vue","bizTimeLine.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/flowable/src/components/flowable/wkfUserDialogForDesign.vue","wkfUserDialogForDesign.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/form/src/components/form/group.vue","group.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/form/src/components/form/label.vue","label.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/form/plugins/src/components/form/plugins/mftccForm.vue","mftccForm.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/layout/src/components/layout/collapse.vue","collapse.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/layout/src/components/layout/container.vue","container.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/src/components/mftccForm.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/src/components/mftccDialogForm.vue","mftccDialogForm.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/src/components/mftccTable.vue","mftccTable.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/src/components/mftccDialogTable.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/src/components/mftccEditTable.vue","mftccEditTable.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/components/src/components/mftccSearch.vue","mftccSearch.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/src/layout/Iframe.vue","Iframe.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/default/src/layout/default/header.vue","header.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/src/layout/menu.vue","menu.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/src/layout/tab.vue","tab.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/src/layout/main.vue","main.vue","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/default/theme/default/header.css","main.css","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/default/theme/default/components.css","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/default/theme/default/components_query.css","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/default/theme/default/components_search.css","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/default/theme/default/components_expand.css","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/default/theme/default/main.css","D:/_work/mftcc-platform/mftcc-base-npm/src/layout/default/theme/default/menu.css","menu.css","D:/_work/mftcc-platform/mftcc-base-npm/src/style/transition.css","transition.css","D:/_work/mftcc-platform/mftcc-base-npm/src/components/table/plugins/src/components/table/plugins/mftccTable.vue"],"names":[],"mappings":"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","file":"app.css","sourcesContent":["<template>\r\n <ul v-show=\"visible\"\r\n :style=\"{left:position.left+'px',top:position.top+'px'}\" class=\"contextmenu el-dropdown-menu \">\r\n <li class=\"el-dropdown-menu__item\" \r\n v-for=\"(item, index) in (items||[])\"\r\n :key=\"index\"\r\n @click=\"Fn(item)\">{{ item.text }}</li>\r\n </ul>\r\n</template>\r\n<script>\r\n\r\n export default {\r\n data() {\r\n return {\r\n visible: this.show\r\n }\r\n },\r\n props: [\"show\",\"position\",\"items\"],\r\n watch: {\r\n show (value) {\r\n this.visible = this.show;\r\n if (value) {\r\n document.body.addEventListener('click', this.closeMenu)\r\n } else {\r\n document.body.removeEventListener('click', this.closeMenu)\r\n }\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n Fn(item) {\r\n this.$emit('callback', item);\r\n this.closeMenu();\r\n },\r\n closeMenu(){\r\n this.$emit('update:show', false);\r\n this.visible = false;\r\n }\r\n }\r\n }\r\n</script>\r\n<style scoped>\r\n.contextmenu{\r\n position: absolute;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.contextmenu{\r\n position: absolute;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n class=\"mftcc-checkbox-dialog\"\r\n :width=\"option.width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n :show=\"show\">\r\n <div slot=\"title\" class=\"dialog-header\" style=\"display: flex;justify-content: flex-end;\">\r\n <label style=\"position: absolute;left: 20px;\">{{ option.title||title }}</label>\r\n <el-input \r\n autocomplete=\"off\"\r\n placeholder=\"请输入关键字\"\r\n suffix-icon=\"el-icon-search\"\r\n v-if=\"(option.search===undefined)?true:option.search\"\r\n v-model=\"searchData\"\r\n style=\"width: 150px;margin: 0px 30px 0px 0px;\"></el-input>\r\n <el-popover\r\n placement=\"bottom\"\r\n width=\"160\"\r\n v-model=\"addVisible\"\r\n v-if=\"(option.insert===undefined)?true:option.insert\">\r\n <el-form :model=\"addForm\" label-width=\"80px\" size=\"mini\">\r\n <el-form-item label=\"真实值\">\r\n <el-input v-model=\"addForm[option.realField||'value']\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"显示值\">\r\n <el-input v-model=\"addForm[option.showField||'text']\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div style=\"text-align: right; margin: 0\">\r\n <el-button type=\"primary\" size=\"mini\" @click=\"addItem\">确定</el-button>\r\n <el-button size=\"mini\" type=\"text\" @click=\"addVisible = false\">取消</el-button>\r\n </div>\r\n <el-button \r\n type=\"primary\" \r\n slot=\"reference\"\r\n style=\"margin: 0px 30px 0px 0px;\">新增</el-button>\r\n </el-popover>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <div class=\"data\">\r\n <div v-if=\"option.group===true\" >\r\n <div \r\n v-for=\"(group, index) in (filterData||[])\"\r\n :key=\"index\" >\r\n <el-divider content-position=\"left\">{{ group.name }}</el-divider>\r\n <el-checkbox-group \r\n v-model=\"option.value[index]\" >\r\n <el-checkbox \r\n v-for=\"(item, index) in (group.data||[])\" \r\n :key=\"index\" \r\n :label=\"item.value\">{{item.text}}</el-checkbox>\r\n </el-checkbox-group>\r\n </div>\r\n </div>\r\n <div v-else>\r\n <el-checkbox-group \r\n v-model=\"option.value\" >\r\n <el-checkbox \r\n v-for=\"(item, index) in (filterData||[])\" \r\n :key=\"index\" \r\n :label=\"item.value\">{{item.text}}</el-checkbox>\r\n </el-checkbox-group>\r\n </div>\r\n </div>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {get,postJson} from '../../axios'\r\n export default {\r\n data() {\r\n return {\r\n title: \"多选筛选器\",\r\n searchData: \"\",\r\n visible: this.show,\r\n addVisible: false,\r\n addForm: {}\r\n }\r\n },\r\n props: [\"show\",\"option\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show;\r\n if(this.visible){\r\n this.searchData = \"\";\r\n if(this.option.initPath !== undefined && this.option.initPath !== null && this.option.initPath !== \"\"){\r\n get(this.option.initPath,null,true,res=>{\r\n this.option.data = res.list;\r\n });\r\n }\r\n }\r\n },\r\n addVisible(){\r\n if(this.addVisible){\r\n this.addForm = {}\r\n }\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n addItem(){\r\n if(this.option.group){\r\n this.$message.error(\"分组暂不支持\");\r\n this.addVisible = false;\r\n }else{\r\n let _this = this;\r\n postJson(this.option.insertPath,this.addForm,true,res=>{\r\n _this.option.data.push({\r\n value: _this.addForm[_this.option.realField||'value'],\r\n text: _this.addForm[_this.option.showField||'text']\r\n });\r\n this.addVisible = false;\r\n });\r\n }\r\n },\r\n submit(){\r\n let value = [];\r\n if(this.option.group){\r\n for(let i in this.option.data){\r\n let dataArr = this.option.data[i].data;\r\n let valueArr = this.option.value[i];\r\n let valueData = [];\r\n for(let v in valueArr){\r\n for(let d in dataArr){\r\n if(dataArr[d][this.option.realField||'value'] === valueArr[v]){\r\n valueData.push(dataArr[d]);\r\n }\r\n }\r\n }\r\n value.push(valueData);\r\n }\r\n }else{\r\n for(let v in this.option.value){\r\n for(let d in this.option.data){\r\n if(this.option.data[d][this.option.realField||'value'] === this.option.value[v]){\r\n value.push(this.option.data[d]);\r\n }\r\n }\r\n }\r\n }\r\n this.$emit('callback', value);\r\n this.visible = false;\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.option.height||'600px';\r\n }\r\n },\r\n computed:{\r\n filterData() {\r\n if(this.option.group){\r\n let data = [];\r\n for(let i in this.option.data){\r\n let groupData = this.option.data[i].data;\r\n let groupName = this.option.data[i].name;\r\n let itemData = [];\r\n for(let d in groupData){\r\n let value = groupData[d][this.option.realField||'value'];\r\n let text = groupData[d][this.option.showField||'text'];\r\n if(text.indexOf(this.searchData) != -1){\r\n itemData.push({\r\n value: value,\r\n text: text\r\n });\r\n }\r\n }\r\n let item = {\r\n name: groupName,\r\n data: itemData\r\n };\r\n data.push(item);\r\n }\r\n return data;\r\n }else{\r\n let data = [];\r\n for(let i in this.option.data){\r\n let value = this.option.data[i][this.option.realField||'value'];\r\n let text = this.option.data[i][this.option.showField||'text'];\r\n if(text.indexOf(this.searchData) != -1){\r\n data.push({\r\n value: value,\r\n text: text \r\n });\r\n }\r\n }\r\n return data;\r\n }\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n.mftcc-checkbox-dialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-checkbox-dialog .el-dialog__body{\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-checkbox-dialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.mftcc-checkbox-dialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n class=\"mftcc-radio-dialog\"\r\n :width=\"option.width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n :close-on-click-modal=\"false\"\r\n append-to-body\r\n :show=\"show\">\r\n <div slot=\"title\" class=\"dialog-header\" style=\"display: flex;justify-content: flex-end;\">\r\n <label style=\"position: absolute;left: 20px;\">{{ option.title||title }}</label>\r\n <el-input \r\n autocomplete=\"off\"\r\n placeholder=\"请输入关键字\"\r\n suffix-icon=\"el-icon-search\"\r\n v-if=\"(option.search===undefined)?true:option.search\"\r\n v-model=\"searchData\"\r\n style=\"width: 150px;margin: 0px 30px 0px 0px;\"></el-input>\r\n <el-popover\r\n placement=\"bottom\"\r\n width=\"160\"\r\n v-model=\"addVisible\"\r\n v-if=\"(option.insert===undefined)?true:option.insert\">\r\n <el-form :model=\"addForm\" label-width=\"80px\" size=\"mini\">\r\n <el-form-item label=\"真实值\">\r\n <el-input v-model=\"addForm[option.realField||'value']\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"显示值\">\r\n <el-input v-model=\"addForm[option.showField||'text']\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div style=\"text-align: right; margin: 0\">\r\n <el-button size=\"mini\" type=\"text\" @click=\"addVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" size=\"mini\" @click=\"addItem\">确定</el-button>\r\n </div>\r\n <el-button \r\n type=\"primary\" \r\n slot=\"reference\"\r\n style=\"margin: 0px 30px 0px 0px;\">新增</el-button>\r\n </el-popover>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <div class=\"data\">\r\n <div v-if=\"option.group===true\" >\r\n <div \r\n v-for=\"(group, index) in (filterData||[])\"\r\n :key=\"index\" >\r\n <el-divider content-position=\"left\">{{ group.name }}</el-divider>\r\n <el-radio-group \r\n v-model=\"option.value[index]\" >\r\n <el-radio \r\n v-for=\"(item, index) in (group.data||[])\" \r\n :key=\"index\" \r\n :label=\"item.value\">{{item.text}}</el-radio>\r\n </el-radio-group>\r\n </div>\r\n </div>\r\n <div v-else>\r\n <el-radio-group \r\n v-model=\"option.value\" >\r\n <el-radio \r\n v-for=\"(item, index) in (filterData||[])\" \r\n :key=\"index\" \r\n :label=\"item.value\">{{item.text}}</el-radio>\r\n </el-radio-group>\r\n </div>\r\n </div>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {get,postJson} from '../../axios'\r\n export default {\r\n data() {\r\n return {\r\n title: \"单选筛选器\",\r\n searchData: \"\",\r\n visible: this.show,\r\n addVisible: false,\r\n addForm: {}\r\n }\r\n },\r\n props: [\"show\",\"option\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show;\r\n if(this.visible){\r\n this.searchData = \"\";\r\n if(this.option.initPath !== undefined && this.option.initPath !== null && this.option.initPath !== \"\"){\r\n get(this.option.initPath,null,true,res=>{\r\n this.option.data = res.list;\r\n });\r\n }\r\n }\r\n },\r\n addVisible(){\r\n if(this.addVisible){\r\n this.addForm = {}\r\n }\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n addItem(){\r\n if(this.option.group){\r\n this.$message.error(\"分组暂不支持\");\r\n }else{\r\n let _this = this;\r\n postJson(this.option.insertPath,this.addForm,true,res=>{\r\n _this.option.data.push({\r\n value: _this.addForm[_this.option.realField||'value'],\r\n text: _this.addForm[_this.option.showField||'text']\r\n });\r\n this.addVisible = false;\r\n });\r\n }\r\n },\r\n submit(){\r\n if(this.option.group){\r\n let value = [];\r\n for(let i in this.option.data){\r\n let dataArr = this.option.data[i].data;\r\n let valueStr = this.option.value[i];\r\n for(let d in dataArr){\r\n if(dataArr[d][this.option.realField||'value'] === valueStr){\r\n value.push(dataArr[d]);\r\n }\r\n }\r\n }\r\n this.$emit('callback', value);\r\n }else{\r\n let value = {};\r\n for(let d in this.option.data){\r\n if(this.option.data[d][this.option.realField||'value'] === this.option.value){\r\n value = this.option.data[d];\r\n }\r\n }\r\n this.$emit('callback', value);\r\n }\r\n this.visible = false;\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.option.height||'600px';\r\n }\r\n },\r\n computed:{\r\n filterData() {\r\n if(this.option.group){\r\n let data = [];\r\n for(let i in this.option.data){\r\n let groupData = this.option.data[i].data;\r\n let groupName = this.option.data[i].name;\r\n let itemData = [];\r\n for(let d in groupData){\r\n let value = groupData[d][this.option.realField||'value'];\r\n let text = groupData[d][this.option.showField||'text'];\r\n if(text.indexOf(this.searchData) != -1){\r\n itemData.push({\r\n value: value,\r\n text: text\r\n });\r\n }\r\n }\r\n let item = {\r\n name: groupName,\r\n data: itemData\r\n };\r\n data.push(item);\r\n }\r\n return data;\r\n }else{\r\n let data = [];\r\n for(let i in this.option.data){\r\n let value = this.option.data[i][this.option.realField||'value'];\r\n let text = this.option.data[i][this.option.showField||'text'];\r\n if(text.indexOf(this.searchData) != -1){\r\n data.push({\r\n value: value,\r\n text: text \r\n });\r\n }\r\n }\r\n return data;\r\n }\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n.mftcc-radio-dialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-radio-dialog .el-dialog__body{\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-radio-dialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.mftcc-radio-dialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n","<template>\r\n <el-dialog\r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n class=\"mftcc-table-dialog\"\r\n :width=\"doption.width\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n append-to-body\r\n :fullscreen=\"doption.fullscreen\"\r\n :center=\"doption.center\"\r\n :close-on-click-modal=\"false\"\r\n :title=\"doption.title\"\r\n >\r\n <div class=\"dialog-content\">\r\n <div class=\"mftcc-dialog-content\">\r\n <mftcc-table\r\n v-if=\"tableShow\"\r\n :tableId=\"doption.tableId\"\r\n :parentVm=\"parentVm\"\r\n :initData=\"initData\"\r\n :initSearchData=\"initSearchData\"\r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n ref=\"dialogList\"\r\n >\r\n </mftcc-table>\r\n </div>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\" v-if=\"doption.footer\">\r\n <el-button type=\"primary\" @click=\"submit\">{{\r\n doption.confirmButtonText\r\n }}</el-button>\r\n <el-button @click=\"visible = false\">{{ doption.cancelButtonText }}</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nexport default {\r\n data() {\r\n return {\r\n initData: {},\r\n visible: this.show,\r\n initSearchData: \"\",\r\n tableShow: false,\r\n };\r\n },\r\n props: {\r\n show: {\r\n type: Boolean,\r\n default() {\r\n return false;\r\n },\r\n },\r\n parentVm: {\r\n type: Object,\r\n default() {\r\n return null;\r\n },\r\n },\r\n option: {\r\n type: Object,\r\n default() {\r\n return {};\r\n },\r\n },\r\n },\r\n computed: {\r\n doption() {\r\n return Object.assign(\r\n {\r\n width: \"1000px\",\r\n height: \"600px\",\r\n fullscreen: false,\r\n center: false,\r\n footer: true,\r\n title: \"列表\",\r\n confirmButtonText: \"确 定\",\r\n cancelButtonText: \"取 消\",\r\n },\r\n this.option\r\n );\r\n },\r\n },\r\n watch: {\r\n show() {\r\n let _this = this;\r\n _this.visible = _this.show;\r\n if (_this.visible === true) {\r\n if (_this.doption.type === \"radio\") {\r\n _this.$set(_this.initData, \"isSelect\", false);\r\n } else {\r\n _this.$set(_this.initData, \"isSelect\", true);\r\n }\r\n _this.$set(_this.initData, \"tableData\", _this.doption.data);\r\n if (_this.doption.columns && _this.doption.columns.length > 0) {\r\n _this.$set(_this.initData, \"columns\", _this.doption.columns);\r\n }\r\n if (_this.doption.initSearchData) {\r\n _this.$set(_this.initData, \"initSearchData\", _this.doption.initSearchData);\r\n }\r\n _this.$set(_this.initData, \"isPagination\", _this.doption.isPagination);\r\n _this.$set(_this.initData, \"url\", _this.doption.url);\r\n _this.initSearchData = _this.doption.initSearchData || {};\r\n\r\n _this.tableShow = true;\r\n _this.$nextTick(() => {\r\n _this.$refs.dialogList.initTable(function () {\r\n setTimeout(function () {\r\n for (let i in _this.doption.value) {\r\n if (\r\n _this.doption.type === \"radio\" &&\r\n _this.doption.value[i].key !== undefined\r\n ) {\r\n _this.$refs.dialogList.setCurrentValue(\r\n _this.doption.value[i].key,\r\n _this.doption.value[i].value\r\n );\r\n } else if (_this.doption.value[i].key !== undefined) {\r\n _this.$refs.dialogList.setSelectValue(\r\n _this.doption.value[i].key,\r\n _this.doption.value[i].value\r\n );\r\n }\r\n }\r\n }, 0);\r\n });\r\n });\r\n } else {\r\n _this.tableShow = false;\r\n }\r\n },\r\n },\r\n methods: {\r\n currentChange(currentRow, oldCurrentRow) {\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n submit() {\r\n let value = [];\r\n if (this.doption.type === \"radio\") {\r\n value = this.$refs.dialogList.getCurrentValue();\r\n } else {\r\n value = this.$refs.dialogList.getSelectValue();\r\n }\r\n this.$emit(\"callback\", value);\r\n this.visible = false;\r\n },\r\n opened() {\r\n this.$refs.dialog.$el.children[0].style.height = this.doption.height;\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-table-dialog .mftcc-form-search {\r\n padding: 0 20px;\r\n}\r\n.mftcc-table-dialog .search_form_div {\r\n display: flex;\r\n align-items: flex-start;\r\n}\r\n.mftcc-table-dialog .dialog-content {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n}\r\n\r\n.mftcc-table-dialog .mftcc-search-form .search-button button {\r\n float: right;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content {\r\n flex-grow: 1;\r\n display: flex;\r\n padding-top: 0px !important;\r\n}\r\n.mftcc-table-dialog .el-dialog {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-table-dialog .el-dialog__body {\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-table-dialog .search_form_div{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: start;\r\n -ms-flex-align: start;\r\n align-items: flex-start;\r\n}\r\n.mftcc-table-dialog .dialog-content{\r\n height: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n}\r\n.mftcc-table-dialog .mftcc-search-form .search-button button{\r\n float: right;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n}\r\n.mftcc-table-dialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.mftcc-table-dialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n :width=\"option.width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n class=\"treeDialog\">\r\n <div slot=\"title\" class=\"dialog-header\" style=\"display: flex;justify-content: flex-end;\">\r\n <label style=\"position: absolute;left: 20px;\">{{ option.title||title }}</label>\r\n <el-input \r\n autocomplete=\"off\"\r\n placeholder=\"请输入关键字\"\r\n suffix-icon=\"el-icon-search\"\r\n v-if=\"(option.search===undefined)?true:option.search\"\r\n v-model=\"searchData\"\r\n style=\"width: 150px;margin: 0px 30px 0px 0px;\"></el-input>\r\n <el-popover\r\n placement=\"bottom\"\r\n width=\"160\"\r\n v-model=\"addVisible\"\r\n v-if=\"(option.insert===undefined)?true:option.insert\">\r\n <el-form :model=\"addForm\" label-width=\"80px\" size=\"mini\">\r\n <el-form-item label=\"真实值\">\r\n <el-input v-model=\"addForm.id\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"显示值\">\r\n <el-input v-model=\"addForm[(option.defaultProps===undefined)?defaultProps.label:'label']\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div style=\"text-align: right; margin: 0\">\r\n <el-button size=\"mini\" type=\"text\" @click=\"addVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" size=\"mini\" @click=\"addItem\">确定</el-button>\r\n </div>\r\n <el-button \r\n type=\"primary\" \r\n slot=\"reference\"\r\n style=\"margin: 0px 30px 0px 0px;\">新增</el-button>\r\n </el-popover>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-tree\r\n :data=\"treeData\"\r\n node-key=\"id\"\r\n highlight-current\r\n check-strictly\r\n :default-checked-keys=\"option.value||[]\"\r\n :default-expanded-keys=\"expandedKeys\"\r\n :current-node-key=\"(option.value===undefined||option.value.length===0)?'':option.value[0]\"\r\n :show-checkbox=\"(option.type==='single')?false:true\"\r\n :props=\"option.defaultProps||defaultProps\"\r\n :filter-node-method=\"filterNode\"\r\n @check=\"handleCheck\"\r\n ref=\"tree\">\r\n </el-tree>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {get,postJson} from '../../axios'\r\n export default {\r\n data() {\r\n return {\r\n title: \"树形筛选器\",\r\n searchData: \"\",\r\n visible: this.show,\r\n defaultProps: {\r\n children: 'children',\r\n label: 'label'\r\n },\r\n expandedKeys: [],\r\n treeData: [],\r\n addVisible: false,\r\n addForm: {}\r\n }\r\n },\r\n props: [\"show\",\"option\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show;\r\n if(this.visible){\r\n this.searchData = \"\";\r\n if(this.option.initPath !== undefined && this.option.initPath !== null && this.option.initPath !== \"\"){\r\n get(this.option.initPath,null,true,res=>{\r\n this.treeData = res.list;\r\n });\r\n }else{\r\n this.treeData = this.option.data;\r\n }\r\n this.expandedKeys = this.option.value||[];\r\n }\r\n },\r\n addVisible(){\r\n if(this.addVisible){\r\n this.addForm = {}\r\n }\r\n },\r\n searchData(val){\r\n this.$refs.tree.filter(val);\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n addItem(){\r\n let node = this.$refs.tree.getCurrentNode();\r\n let pid = node.id;\r\n this.addForm.pid = pid;\r\n this.addForm.children = [];\r\n postJson(this.option.insertPath,this.addForm,true,res=>{\r\n this.$refs.tree.append(this.addForm, pid);\r\n this.expandedKeys = [this.addForm.id];\r\n this.addVisible = false;\r\n });\r\n },\r\n submit(){\r\n let value = [];\r\n if(this.option.type===\"single\"){\r\n let cn = this.$refs.tree.getCurrentNode();\r\n let node = this.$refs.tree.getNode(cn.id);\r\n let parentNodes = [];\r\n this.getParentNodes(node,parentNodes);\r\n value = value.concat(parentNodes);\r\n value.push(node.data);\r\n }else{\r\n let nodes = this.$refs.tree.getCheckedNodes();\r\n let parentNodes = [];\r\n let nodeArr = [];\r\n for(let i in nodes){\r\n let node = this.$refs.tree.getNode(nodes[i].id);\r\n if(i<nodes.length-1){\r\n let nextNode = this.$refs.tree.getNode(nodes[Number(i)+1].id);\r\n if(node.level<nextNode.level){\r\n parentNodes.push(nodes[i]);\r\n }else{\r\n nodeArr.push(nodes[i]);\r\n }\r\n }else{\r\n nodeArr.push(nodes[i]);\r\n }\r\n }\r\n for(let n in nodeArr){\r\n let arr = []\r\n arr = arr.concat(parentNodes);\r\n arr.push(nodeArr[n]);\r\n value.push(arr);\r\n }\r\n }\r\n this.$emit('callback', value);\r\n this.visible = false;\r\n },\r\n filterNode(value, data) {\r\n if (!value) return true;\r\n let dp = this.option.defaultProps||this.defaultProps;\r\n return data[dp.label].indexOf(value) !== -1;\r\n },\r\n getParentNodes(node, nodeArr){\r\n if(node.parent && node.parent.key){\r\n nodeArr.push(node.parent.data);\r\n this.getParentNodes(node.parent, nodeArr);\r\n }\r\n },\r\n handleCheck (currentObj, treeStatus) {\r\n // 用于:父子节点严格互不关联时,父节点勾选变化时通知子节点同步变化,实现单向关联。\r\n let selected = treeStatus.checkedKeys.indexOf(currentObj.id) // -1未选中\r\n // 选中\r\n if (selected !== -1) {\r\n // 子节点只要被选中父节点就被选中\r\n this.selectedParent(currentObj)\r\n // 统一处理子节点为相同的勾选状态\r\n this.uniteChildSame(currentObj, true)\r\n } else {\r\n // 未选中 处理子节点全部未选中\r\n let dp = this.option.defaultProps||this.defaultProps;\r\n if (currentObj[dp.children]&¤tObj[dp.children].length !== 0) {\r\n this.uniteChildSame(currentObj, false)\r\n }\r\n }\r\n },\r\n // 统一处理子节点为相同的勾选状态\r\n uniteChildSame (treeList, isSelected) {\r\n this.$refs.tree.setChecked(treeList.id, isSelected);\r\n let dp = this.option.defaultProps||this.defaultProps;\r\n if(treeList[dp.children]){\r\n for (let i = 0; i < treeList[dp.children].length; i++) {\r\n this.uniteChildSame(treeList[dp.children][i], isSelected)\r\n }\r\n }\r\n },\r\n // 统一处理父节点为选中\r\n selectedParent (currentObj) {\r\n let currentNode = this.$refs.tree.getNode(currentObj)\r\n if (currentNode.parent.key !== undefined) {\r\n this.$refs.tree.setChecked(currentNode.parent, true)\r\n this.selectedParent(currentNode.parent)\r\n }\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.option.height||'600px';\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n.treeDialog .el-tree{\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.treeDialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.treeDialog .el-dialog__body{\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.treeDialog .el-tree{\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.treeDialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.treeDialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n","<template>\r\n <el-container>\r\n <el-timeline class=\"appTimeLine\">\r\n <el-timeline-item\r\n v-for=\"(timeline, index) in timeLineData\"\r\n :key=\"index\"\r\n :color=\"timeline.dotcolor\"\r\n :size=\"timeline.dotsize\"\r\n placement=\"top\"\r\n :timestamp=\"getCreateTime(timeline)\"\r\n >\r\n <!-- 会签 -->\r\n <el-card\r\n class=\"timeLineItem\"\r\n body-style=\"padding:10px;\"\r\n v-if=\"timeline.isMultiSign === true\"\r\n >\r\n <span class=\"taskName\">{{ getTaskName(timeline) }}</span>\r\n <el-collapse>\r\n <el-collapse-item\r\n v-for=\"(item, index) in timeline.multiSignGroup\"\r\n :key=\"index\"\r\n >\r\n <template slot=\"title\">\r\n <div style=\"width: 100%\">\r\n <div v-if=\"timeline.isOpen\" class=\"openTask\">\r\n <span style=\"font-weight: bold\"\r\n ><span class=\"assignee-name\">{{ item.ASSIGNEE_NAME }} </span>\r\n <span\r\n v-if=\"timeline.TASK_TYPE != '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >审批中...</span\r\n >\r\n <span\r\n v-if=\"timeline.TASK_TYPE == '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >分配中...</span\r\n ></span\r\n >\r\n <span class=\"duration\">已送达:{{ item.DURATION }}</span>\r\n <el-button\r\n v-if=\"timeline.isOpen && isTest\"\r\n type=\"primary\"\r\n size=\"mini\"\r\n @click=\"doCommitTest(timeline)\"\r\n >审批</el-button\r\n >\r\n </div>\r\n <div class=\"app-footer\" v-if=\"!timeline.isOpen\">\r\n <span class=\"endTime\"\r\n ><i class=\"el-icon-time\"></i>{{ item.END_TIME }}</span\r\n >\r\n <span class=\"assignee\"\r\n >处理人:<span class=\"assignee-name\">{{\r\n item.ASSIGNEE_NAME\r\n }}</span></span\r\n >\r\n </div>\r\n </div>\r\n </template>\r\n <div class=\"app-header\" v-if=\"!timeline.isOpen\">\r\n <span class=\"approveType\">{{ item.APPROVE_TYPE }}</span>\r\n <span class=\"duration\">耗时:{{ item.DURATION }}</span>\r\n </div>\r\n <div class=\"app-content\" v-if=\"!timeline.isOpen\">\r\n <div class=\"approveIdea\">{{ resApproveIdea(item.APPROVE_IDEA) }}</div>\r\n </div>\r\n </el-collapse-item>\r\n </el-collapse>\r\n </el-card>\r\n <!-- 子流程 -->\r\n <el-card\r\n class=\"timeLineItem\"\r\n body-style=\"padding:10px;\"\r\n v-else-if=\"timeline.TASK_TYPE == '9'\"\r\n >\r\n <span class=\"taskName\">{{ getTaskName(timeline) }}</span>\r\n <div v-if=\"!timeline.END_TIME\" class=\"openTask\">\r\n <span style=\"font-weight: bold\"\r\n ><span class=\"assignee-name\">{{ timeline.ASSIGNEE_NAME }} </span>\r\n <span\r\n v-if=\"timeline.TASK_TYPE != '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >审批中...</span\r\n >\r\n <span\r\n v-if=\"timeline.TASK_TYPE == '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >分配中...</span\r\n ></span\r\n >\r\n <span class=\"duration\">已送达:{{ timeline.DURATION }}</span>\r\n </div>\r\n <el-button\r\n v-if=\"!timeline.END_TIME && isTest\"\r\n type=\"primary\"\r\n size=\"mini\"\r\n @click=\"doCommitTest(timeline)\"\r\n >审批</el-button\r\n >\r\n <div\r\n v-if=\"timeline.END_TIME\"\r\n style=\"\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n justify-content: flex-end;\r\n padding: 0 10px;\r\n \"\r\n >\r\n <div style=\"width: 100%; display: flex; justify-content: space-between\">\r\n <span :style=\"'color:' + dotcolor\"\r\n ><i class=\"el-icon-success\"></i> 已完成</span\r\n >\r\n <span class=\"duration\" style=\"color: #909399; font-size: 13px\"\r\n >耗时:{{ timeline.DURATION }}</span\r\n >\r\n </div>\r\n <el-button type=\"text\" @click=\"queryChildProcess(timeline)\"\r\n >查看详情</el-button\r\n >\r\n </div>\r\n </el-card>\r\n <el-card\r\n class=\"timeLineItem onlyName\"\r\n body-style=\"padding:10px;\"\r\n v-else-if=\"!timeline.PROC_INST_ID\"\r\n >\r\n <span class=\"taskName\">{{ getTaskName(timeline) }}</span>\r\n </el-card>\r\n <el-card class=\"timeLineItem\" body-style=\"padding:10px;\" v-else>\r\n <span class=\"taskName\">{{ getTaskName(timeline) }}</span>\r\n <div v-if=\"timeline.isOpen\" class=\"openTask\">\r\n <span style=\"font-weight: bold\"\r\n ><span class=\"assignee-name\">{{ timeline.ASSIGNEE_NAME }} </span>\r\n <span\r\n v-if=\"timeline.TASK_TYPE != '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >审批中...</span\r\n >\r\n <span\r\n v-if=\"timeline.TASK_TYPE == '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >分配中...</span\r\n ></span\r\n >\r\n <span class=\"duration\">已送达:{{ timeline.DURATION }}</span>\r\n </div>\r\n <el-button\r\n v-if=\"timeline.isOpen && isTest\"\r\n type=\"primary\"\r\n size=\"mini\"\r\n @click=\"doCommitTest(timeline)\"\r\n >审批</el-button\r\n >\r\n <div class=\"app-header\" v-if=\"!timeline.isOpen\">\r\n <span v-if=\"timeline.TASK_TYPE == 8\" class=\"approveType\">业务完成</span>\r\n <span v-else class=\"approveType\">{{ timeline.APPROVE_TYPE }}</span>\r\n <span class=\"duration\">耗时:{{ timeline.DURATION }}</span>\r\n </div>\r\n <div\r\n class=\"app-content\"\r\n v-if=\"!timeline.isOpen && resApproveIdea(timeline.APPROVE_IDEA) !== ''\"\r\n >\r\n <div class=\"approveIdea\">{{ resApproveIdea(timeline.APPROVE_IDEA) }}</div>\r\n </div>\r\n <div class=\"app-footer\" v-if=\"!timeline.isOpen\">\r\n <span class=\"endTime\"\r\n ><i class=\"el-icon-time\"></i>{{ timeline.END_TIME }}</span\r\n >\r\n <span\r\n v-if=\"timeline.TASK_TYPE != 8 && timeline.TASK_TYPE != 5\"\r\n class=\"assignee\"\r\n >处理人:<span class=\"assignee-name\">{{\r\n timeline.ASSIGNEE_NAME\r\n }}</span></span\r\n >\r\n </div>\r\n </el-card>\r\n </el-timeline-item>\r\n </el-timeline>\r\n <el-drawer\r\n title=\"审批历史\"\r\n :visible.sync=\"childProcessShow\"\r\n direction=\"rtl\"\r\n custom-class=\"timeLineDrawer\"\r\n :modal=\"false\"\r\n size=\"80%\"\r\n :with-header=\"false\"\r\n >\r\n <time-line\r\n :timeLineShow=\"childProcessShow\"\r\n :traceNo=\"childProcessTraceNo\"\r\n :bizMark=\"childProcessBizMark\"\r\n ></time-line>\r\n </el-drawer>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport api from \"../../api/flowable\";\r\nexport default {\r\n name: \"timeLine\",\r\n data() {\r\n return {\r\n childProcessShow: false,\r\n timeLineData: [],\r\n childProcessTraceNo: \"\",\r\n childProcessBizMark: \"\",\r\n dotcolor: \"#1EC5B5\",\r\n dotsize: \"large\",\r\n };\r\n },\r\n props: [\"timeLineShow\", \"traceNo\", \"bizMark\", \"taskDefId\", \"isShowSign\", \"isTest\"],\r\n watch: {\r\n timeLineShow(value) {\r\n if (value) {\r\n this.init();\r\n } else {\r\n this.childProcessShow = false;\r\n }\r\n },\r\n },\r\n created() {\r\n this.init();\r\n },\r\n methods: {\r\n init() {\r\n //业务唯一标识为空时,不展示审批历史\r\n if (this.traceNo == \"\" || this.traceNo == null) {\r\n return;\r\n }\r\n let param = {\r\n traceNo: this.traceNo,\r\n bizMark: this.bizMark,\r\n taskDefId: this.taskDefId,\r\n isShowSign: this.isShowSign,\r\n opNo: this.$store.getters.user.opNo,\r\n };\r\n api.getTimeLine(param, (res) => {\r\n if (res.code == 0) {\r\n this.timeLineData = res.data.hisTask;\r\n if (res.data.task && res.data.task.length > 0) {\r\n for (let i in res.data.task) {\r\n res.data.task[i].isOpen = true;\r\n res.data.task[i].dotcolor = this.dotcolor;\r\n res.data.task[i].dotsize = this.dotsize;\r\n }\r\n this.timeLineData = this.timeLineData.concat(res.data.task);\r\n }\r\n if (res.data.assign && res.data.assign.length > 0) {\r\n for (let i in res.data.assign) {\r\n res.data.assign[i].isOpen = true;\r\n res.data.assign[i].dotcolor = this.dotcolor;\r\n res.data.assign[i].dotsize = this.dotsize;\r\n }\r\n this.timeLineData = this.timeLineData.concat(res.data.assign);\r\n }\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n },\r\n queryChildProcess(timeline) {\r\n if (timeline.TASK_TYPE == \"9\" && timeline.childProc) {\r\n this.childProcessTraceNo = timeline.childProc[0].TRACE_NO;\r\n this.childProcessBizMark = timeline.childProc[0].BIZ_ID;\r\n this.childProcessShow = true;\r\n }\r\n },\r\n resApproveIdea(value) {\r\n if (!value) {\r\n return \"\";\r\n }\r\n // let data = JSON.parse(value);\r\n // if(data.newApprove){\r\n // return data.newApprove[0].name;\r\n // }else{\r\n // return data;\r\n // }\r\n return value;\r\n },\r\n getCreateTime(timeline) {\r\n if (timeline.isMultiSign) {\r\n return timeline.multiSignGroup[0].CREATE_TIME;\r\n } else {\r\n return timeline.CREATE_TIME;\r\n }\r\n },\r\n getTaskName(timeline) {\r\n if (timeline.isMultiSign) {\r\n return timeline.multiSignGroup[0].TASK_NAME;\r\n } else {\r\n if (timeline.TASK_NAME == \"launchNode\") {\r\n return \"开始\";\r\n }\r\n return timeline.TASK_NAME;\r\n }\r\n },\r\n doCommitTest(timeline) {\r\n this.$emit(\"doCommitTest\", timeline);\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.appTimeLine {\r\n overflow: auto;\r\n padding: 20px;\r\n width: 100%;\r\n}\r\n.appTimeLine .el-timeline-item__timestamp {\r\n padding-top: 20px;\r\n}\r\n.timeLineItem.onlyName {\r\n box-shadow: none;\r\n border: none;\r\n}\r\n.timeLineItem.onlyName .el-card__body {\r\n padding: 0px !important;\r\n}\r\n.timeLineItem .taskName {\r\n font-weight: bold;\r\n position: absolute;\r\n top: -3px;\r\n left: 28px;\r\n font-size: 15px;\r\n color: #909399;\r\n}\r\n.timeLineItem .el-collapse,\r\n.timeLineItem .el-collapse-item__header,\r\n.timeLineItem .el-collapse-item__wrap {\r\n border: none;\r\n}\r\n\r\n.timeLineItem .app-header .duration,\r\n.openTask .duration {\r\n color: #909399;\r\n font-size: 13px;\r\n float: right;\r\n}\r\n.timeLineItem .app-header .approveType {\r\n color: #1ec5b5;\r\n}\r\n.timeLineItem .app-footer .endTime {\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n.timeLineItem .app-footer .endTime i {\r\n margin-right: 5px;\r\n}\r\n.timeLineItem .app-footer .assignee {\r\n color: #909399;\r\n font-size: 13px;\r\n float: right;\r\n}\r\n.timeLineItem .app-footer .assignee-name {\r\n font-size: 15px;\r\n color: #000;\r\n font-weight: bold;\r\n float: right;\r\n margin: 0 0 0 6px;\r\n border-bottom: solid 1px #eee;\r\n min-width: 90px;\r\n text-align: center;\r\n height: 25px;\r\n line-height: 25px;\r\n}\r\n.timeLineItem .app-content,\r\n.timeLineItem .app-header,\r\n.timeLineItem .app-footer {\r\n line-height: 30px;\r\n padding: 0 10px;\r\n margin-bottom: 10px;\r\n}\r\n.timeLineItem .app-content .approveIdea {\r\n min-height: 60px;\r\n background: linear-gradient(to bottom, transparent 29px, #eee 1px);\r\n background-size: 100% 30px;\r\n color: #ff9800;\r\n}\r\n.timeLineDrawer .el-drawer__wrapper {\r\n position: absolute;\r\n margin-bottom: 0px;\r\n}\r\n.openTask {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 10px;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.appTimeLine {\r\n overflow: auto;\r\n padding: 20px;\r\n width: 100%;\r\n}\r\n.appTimeLine .el-timeline-item__timestamp {\r\n padding-top: 20px;\r\n}\r\n.timeLineItem.onlyName {\r\n -webkit-box-shadow: none;\r\n box-shadow: none;\r\n border: none;\r\n}\r\n.timeLineItem.onlyName .el-card__body {\r\n padding: 0px !important;\r\n}\r\n.timeLineItem .taskName {\r\n font-weight: bold;\r\n position: absolute;\r\n top: -3px;\r\n left: 28px;\r\n font-size: 15px;\r\n color: #909399;\r\n}\r\n.timeLineItem .el-collapse,\r\n.timeLineItem .el-collapse-item__header,\r\n.timeLineItem .el-collapse-item__wrap {\r\n border: none;\r\n}\r\n.timeLineItem .app-header .duration,\r\n.openTask .duration {\r\n color: #909399;\r\n font-size: 13px;\r\n float: right;\r\n}\r\n.timeLineItem .app-header .approveType {\r\n color: #1ec5b5;\r\n}\r\n.timeLineItem .app-footer .endTime {\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n.timeLineItem .app-footer .endTime i {\r\n margin-right: 5px;\r\n}\r\n.timeLineItem .app-footer .assignee {\r\n color: #909399;\r\n font-size: 13px;\r\n float: right;\r\n}\r\n.timeLineItem .app-footer .assignee-name {\r\n font-size: 15px;\r\n color: #000;\r\n font-weight: bold;\r\n float: right;\r\n margin: 0 0 0 6px;\r\n border-bottom: solid 1px #eee;\r\n min-width: 90px;\r\n text-align: center;\r\n height: 25px;\r\n line-height: 25px;\r\n}\r\n.timeLineItem .app-content,\r\n.timeLineItem .app-header,\r\n.timeLineItem .app-footer {\r\n line-height: 30px;\r\n padding: 0 10px;\r\n margin-bottom: 10px;\r\n}\r\n.timeLineItem .app-content .approveIdea {\r\n min-height: 60px;\r\n background: linear-gradient(to bottom, transparent 29px, #eee 1px);\r\n background-size: 100% 30px;\r\n color: #ff9800;\r\n}\r\n.timeLineDrawer .el-drawer__wrapper {\r\n position: absolute;\r\n margin-bottom: 0px;\r\n}\r\n.openTask {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n padding: 12px 10px;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :close-on-click-modal=\"false\"\r\n :show=\"show\"\r\n class=\"wkf-user-Dialog\">\r\n <div slot=\"title\" class=\"dialog-header\">\r\n <label>选择人员</label>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-select \r\n v-model=\"userCheck\" \r\n :multiple=\"(type==='single')?false:true\"\r\n placeholder=\"点击下方选择\"\r\n clearable\r\n @visible-change=\"userChange\"\r\n ref=\"userSelect\"\r\n @change=\"userCheckedChange\">\r\n <el-option\r\n v-for=\"user in allUserArray\"\r\n :key=\"user.id\"\r\n :label=\"user.title\"\r\n :value=\"user.id\">\r\n </el-option>\r\n </el-select>\r\n <el-row>\r\n <el-col :span=\"16\" class=\"br-tree\">\r\n <div class=\"content\">\r\n <el-tree\r\n :data=\"treeData\"\r\n node-key=\"id\"\r\n highlight-current\r\n check-strictly\r\n :default-expanded-keys=\"expandedKeys\"\r\n :show-checkbox=\"false\"\r\n :props=\"defaultProps\"\r\n :filter-node-method=\"filterNode\"\r\n :expand-on-click-node=\"false\"\r\n @current-change=\"handleCheck\"\r\n ref=\"tree\"\r\n style=\"padding: 20px 0px 0 20px;\">\r\n </el-tree>\r\n </div>\r\n </el-col>\r\n <el-col :span=\"8\">\r\n <div class=\"user-group\">\r\n <template v-if=\"type==='single'\">\r\n <el-radio-group v-model=\"userCheck\">\r\n <el-radio \r\n v-for=\"user in userArray\"\r\n :key=\"user.id\"\r\n :label=\"user.id\">{{user.title}}\r\n </el-radio>\r\n </el-radio-group>\r\n </template>\r\n <template v-else>\r\n <el-checkbox \r\n :indeterminate=\"isIndeterminate\" \r\n v-model=\"checkAll\" \r\n @change=\"userCheckAllChange\"\r\n >全选</el-checkbox>\r\n <el-checkbox-group \r\n @change=\"userCheckedChange\"\r\n v-model=\"userCheck\">\r\n <el-checkbox \r\n v-for=\"user in userArray\"\r\n :key=\"user.id\"\r\n :label=\"user.id\">\r\n {{user.title}}\r\n </el-checkbox>\r\n </el-checkbox-group>\r\n </template>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n \r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {get, postJson} from '../../axios'\r\n export default {\r\n data() {\r\n return {\r\n title: \"选择人员\",\r\n visible: this.show,\r\n defaultProps: {\r\n children: 'children',\r\n label: 'title'\r\n },\r\n expandedKeys: [],\r\n treeData: [],\r\n userArray: [],\r\n userCheck: [],\r\n allUserArray: [],\r\n checkAll: false,\r\n isIndeterminate: false\r\n }\r\n },\r\n props: [\"show\",\"initData\",\"type\",\"searchData\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show\r\n if(this.visible === true){\r\n this.getTreeData()\r\n }\r\n }\r\n },\r\n created(){\r\n this.getTreeData()\r\n },\r\n methods: {\r\n userCheckAllChange(val) {\r\n for(let user of this.userArray){\r\n let index = this.userCheck.indexOf(user.id)\r\n if(index === -1 && val){\r\n this.userCheck.push(user.id);\r\n }else if(index != -1 && !val){\r\n this.userCheck.splice(index, 1); \r\n }\r\n }\r\n this.isIndeterminate = false;\r\n },\r\n userCheckedChange() {\r\n let checkedCount = 0 \r\n for(let user of this.userArray){\r\n if(this.userCheck.indexOf(user.id) != -1){\r\n checkedCount += 1\r\n }\r\n }\r\n this.checkAll = checkedCount > 0 && checkedCount === this.userArray.length;\r\n this.isIndeterminate = checkedCount > 0 && checkedCount < this.userArray.length;\r\n },\r\n userChange(value){\r\n if(value === true){\r\n this.$refs.userSelect.blur()\r\n }\r\n },\r\n getUsers(data,users){\r\n if(!(users instanceof Array)){\r\n users = []\r\n }\r\n for(let treeNode of data){\r\n if(treeNode.user instanceof Array){\r\n users = users.concat(treeNode.user)\r\n }\r\n if(treeNode.children instanceof Array){\r\n users = this.getUsers(treeNode.children,users)\r\n }\r\n }\r\n return users\r\n },\r\n getTreeData(){\r\n this.userArray = []\r\n this.treeData = []\r\n this.checkAll = false\r\n this.isIndeterminate = false\r\n let data = this.searchData || {}\r\n postJson(\"/mftcc-flowable-server/br/listForTreeAll\",data,true,res => {\r\n this.treeData = res.data\r\n this.allUserArray = this.unique(this.getUsers(res.data))\r\n if(this.type === 'single'){\r\n if(typeof(this.initData)=='string'){\r\n this.userCheck = this.initData\r\n }else{\r\n this.userCheck = ''\r\n }\r\n }else if(this.initData instanceof Array){\r\n this.userCheck = JSON.parse(JSON.stringify(this.initData))\r\n }else{\r\n this.userCheck = []\r\n }\r\n },error => {\r\n this.userCheck = []\r\n })\r\n },\r\n submit(){\r\n let result = []\r\n for(let user of this.allUserArray){\r\n if(this.type === 'single'){\r\n if(user.id === this.userCheck){\r\n result.push(user)\r\n }\r\n }else{\r\n for(let userCheck of this.userCheck){\r\n if(user.id === userCheck){\r\n result.push(user)\r\n }\r\n }\r\n }\r\n }\r\n this.$emit('callback', result);\r\n this.visible = false;\r\n },\r\n filterNode(value, data) {\r\n if (!value) return true;\r\n return data[dp.label].indexOf(value) !== -1;\r\n },\r\n unique(arr1) {\r\n const res = new Map();\r\n return arr1.filter((a) => !res.has(a.id) && res.set(a.id, 1))\r\n },\r\n handleCheck (currentObj, treeStatus) {\r\n if(currentObj.user instanceof Array){\r\n this.userArray = this.unique(currentObj.user)\r\n }else{\r\n this.userArray = []\r\n }\r\n this.userCheckedChange()\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n.wkf-user-Dialog .el-tree{\r\n height: 300px;\r\n overflow: auto;\r\n}\r\n.wkf-user-Dialog .el-dialog{\r\n width: 500px;\r\n}\r\n.wkf-user-Dialog .dialog-header{\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n.wkf-user-Dialog .dialog-header label{\r\n position: absolute;left: 20px;\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row{\r\n border: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .br-tree{\r\n border-right: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .user-group{\r\n width: 100px;padding: 20px 0px 0 20px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.wkf-user-Dialog .el-tree{\r\n height: 300px;\r\n overflow: auto;\r\n}\r\n.wkf-user-Dialog .el-dialog{\r\n width: 500px;\r\n}\r\n.wkf-user-Dialog .dialog-header{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: end;\r\n -ms-flex-pack: end;\r\n justify-content: flex-end;\r\n}\r\n.wkf-user-Dialog .dialog-header label{\r\n position: absolute;left: 20px;\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row{\r\n border: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .br-tree{\r\n border-right: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .user-group{\r\n width: 100px;padding: 20px 0px 0 20px;\r\n}\r\n","<template>\r\n <div id=\"iframeBox\" ref=\"iframeBox\">\r\n <iframe ref=\"iframe\" name=\"refresh_name\" class=\"iframe-style\" frameborder=\"no\" border=\"0\" />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { getToken, setToken } from \"../utils/storeUtil\";\r\nexport default {\r\n name: \"mftccIframe\",\r\n data() {\r\n return {\r\n loading: null,\r\n isLoaded:false,\r\n callback:null\r\n };\r\n },\r\n props: [\"src\",\"initParams\"],\r\n created() {},\r\n mounted() {\r\n this.resetSrc();\r\n this.message();\r\n },\r\n methods: {\r\n resetSrc() {\r\n let iframeUrl;\r\n if(this.src){\r\n iframeUrl = this.src;\r\n }else{\r\n let path = this.$route.path;\r\n iframeUrl = this.$route.meta.iframeUrl;\r\n if(iframeUrl.startsWith(\"/\")){\r\n iframeUrl = iframeUrl.substring(1);\r\n }\r\n var productName =iframeUrl.split(\"/\")[0];\r\n var productType = productName.substring(productName.indexOf(\"-\")+1,productName.lastIndexOf(\"-\"));\r\n let env = process.env.NODE_ENV == 'development'?\"DEV_\":\"PRO_\";\r\n let realPath = window.serverConfig[env+productType.toUpperCase()+\"_HOST\"]||\"\";\r\n if(!realPath){\r\n realPath = this.$store.getters.serverConfig[env+productType.toUpperCase()+\"_HOST\"]||\"\";\r\n }\r\n iframeUrl = realPath + \"/\" + iframeUrl;\r\n }\r\n if(iframeUrl){\r\n this.iframeInit(iframeUrl);\r\n }\r\n },\r\n sendToken(newVal) {\r\n const iframe = this.$refs.iframe;\r\n //发送消息\r\n let data = JSON.stringify({\r\n token:getToken(),\r\n initParams:this.initParams\r\n });\r\n iframe.contentWindow.postMessage(data, \"*\");\r\n // if(!this.isLoaded){\r\n // this.forceUpdataIframe(iframe, newVal)\r\n // this.isLoaded = true;\r\n\r\n // }\r\n //关闭加载\r\n this.loading.close();\r\n },\r\n //iframe 初始化\r\n iframeInit(newVal) {\r\n //链接为空不显示加载状态和绑定ifram监听事件\r\n if (newVal == \"\") {\r\n return;\r\n }\r\n // debugger;\r\n if (this.loading) {\r\n this.loading.close();\r\n }\r\n this.loading = this.$loading({\r\n target: this.$refs.iframeBox.$el,\r\n lock: true,\r\n customClass: \"global-loading\",\r\n text: \"页面加载中...\",\r\n spinner: \"el-icon-loading\",\r\n background: \"transparent\"\r\n });\r\n let iframe = this.$refs.iframe;\r\n\r\n // 处理兼容行问题\r\n if (iframe.attachEvent) {\r\n iframe.attachEvent(\"onload\", () => {\r\n this.sendToken(newVal);\r\n });\r\n } else {\r\n iframe.onload = () => {\r\n console.log(\"isOnLoad\");\r\n this.sendToken(newVal);\r\n };\r\n }\r\n\r\n\r\n //利用异步延迟加载和链接随机传参来达到刷新iframe缓存的目的,不加此步骤iframe页面不更新\r\n this.forceUpdataIframe(iframe, newVal);\r\n\r\n // debugger;\r\n },\r\n //强制刷新iframe缓存\r\n forceUpdataIframe(iframe, newVal) {\r\n setTimeout(() => {\r\n let fresh_link = new Date().getTime() + Math.floor(Math.random() * 1000000); //获取当前时间戳\r\n String.prototype.splice = function(start, newStr) {\r\n return this.slice(0, start) + newStr + this.slice(start);\r\n };\r\n let strIndex = newVal.indexOf(\"/#/\");\r\n let url;\r\n if(strIndex!=-1){\r\n url = newVal.splice(strIndex, \"?time=\" + fresh_link);\r\n }else{\r\n url = newVal + \"?time=\" + fresh_link;\r\n }\r\n let query = this.$route.query;\r\n for(let key in query){\r\n url += \"&\"+key+\"=\"+query[key];\r\n }\r\n console.log(\"url\", url);\r\n iframe.src = url;\r\n }, 100);\r\n },\r\n message(){\r\n window.removeEventListener('message',iframeHandler);\r\n window.addEventListener('message', iframeHandler);\r\n let _this = this;\r\n function iframeHandler(e) {\r\n if(typeof(_this.callback) === \"function\"){\r\n if(e.data.type == \"setVariables\"\r\n ||e.data.type == \"doCommitBack\"\r\n ||e.data.type == \"appFormInitMethod\"\r\n ||e.data.type == \"appPageDataMethod\"){\r\n _this.callback(e.data.data);\r\n _this.callback = null;\r\n }\r\n }\r\n }\r\n },\r\n //流程获取变量函数\r\n getVariables(variablesMethod,formData,callback){\r\n this.callback = callback;\r\n let data = {\r\n type: \"getVariables\",\r\n formData:formData,\r\n method: variablesMethod\r\n };\r\n this.$refs.iframe.contentWindow.postMessage(data, \"*\");\r\n },\r\n doCommit(method,params,callback){\r\n this.callback = callback;\r\n let data = {\r\n type: \"doCommit\",\r\n params: params,\r\n method: method\r\n };\r\n this.$refs.iframe.contentWindow.postMessage(data, \"*\");\r\n },\r\n appFormInitMethod(method,callback){\r\n this.callback = callback;\r\n let data = {\r\n type: \"appFormInitMethod\",\r\n method: method\r\n };\r\n this.$refs.iframe.contentWindow.postMessage(data, \"*\");\r\n },\r\n appPageDataMethod(method,callback){\r\n this.callback = callback;\r\n let data = {\r\n type: \"appPageDataMethod\",\r\n method: method\r\n };\r\n this.$refs.iframe.contentWindow.postMessage(data, \"*\");\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n#iframeBox{\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.iframe-style{\r\n width: 100%;\r\n height: calc(100% - 3px);\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n#iframeBox{\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.iframe-style{\r\n width: 100%;\r\n height: calc(100% - 3px);\r\n}\r\n","<template>\r\n <el-container class=\"appDetails\">\r\n <el-dialog\r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n v-dialogDrag\r\n ref=\"appDetails\"\r\n :close-on-click-modal=\"false\"\r\n custom-class=\"appDialog\"\r\n >\r\n <div slot=\"title\" class=\"dialog-header\" style=\"display: flex\">\r\n <label>审批详情</label>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-alert\r\n v-show=\"messageShow\"\r\n title=\"审批建议\"\r\n type=\"warning\"\r\n :description=\"approveGuide\"\r\n close-text=\"知道了\"\r\n @close=\"closeMessage\"\r\n v-if=\"query !== true\"\r\n style=\"position: absolute; top: 0; border-radius: 0\"\r\n show-icon\r\n >\r\n </el-alert>\r\n <div :class=\"appClassName\" style=\"height: 100%; overflow: auto\">\r\n <component :is=\"page\" v-bind=\"methodParam\" ref=\"component\"> </component>\r\n </div>\r\n <!-- <mftcc-iframe\r\n ref=\"component\"\r\n v-if=\"page !== null\"\r\n :src=\"page\"\r\n :initParams=\"methodParam\"\r\n ></mftcc-iframe> -->\r\n <el-drawer\r\n title=\"审批意见\"\r\n :visible.sync=\"approveShow\"\r\n direction=\"btt\"\r\n :custom-class=\"'approveDrawer ' + (appPage ? 'appPage' : '')\"\r\n :modal=\"false\"\r\n :with-header=\"false\"\r\n >\r\n <el-row v-if=\"appFormId != '' && appFormShow\" class=\"appFormRow\">\r\n <mftcc-form\r\n :formId=\"appFormId\"\r\n :parentVm=\"this\"\r\n ref=\"appBizForm\"\r\n ></mftcc-form>\r\n </el-row>\r\n <el-row v-if=\"appPage && appFormShow\" class=\"appFormRow\">\r\n <div :class=\"appPageClassName\">\r\n <component\r\n :is=\"page4app\"\r\n v-bind=\"appPageMethodParam\"\r\n ref=\"componentAppPage\"\r\n >\r\n </component>\r\n </div>\r\n <!-- <mftcc-iframe\r\n ref=\"componentAppPage\"\r\n v-if=\"page4app !== null\"\r\n :src=\"page4app\"\r\n :initParams=\"appPageMethodParam\"\r\n ></mftcc-iframe> -->\r\n </el-row>\r\n <el-form\r\n ref=\"appForm\"\r\n :model=\"appForm\"\r\n label-width=\"80px\"\r\n :rules=\"appFormRules\"\r\n class=\"appFormRow2\"\r\n >\r\n <el-row>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"意见类型\" prop=\"type\">\r\n <el-select\r\n v-model=\"appForm.type\"\r\n placeholder=\"请选择\"\r\n @change=\"selectType\"\r\n >\r\n <el-option\r\n v-for=\"approveBtn in approveBtnList\"\r\n :key=\"approveBtn.id\"\r\n :label=\"approveBtn.approveIdea\"\r\n :value=\"approveBtn.id\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"节点选择\" prop=\"type\" v-show=\"nodeShow\">\r\n <el-select v-model=\"node\" placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"node in nodeList\"\r\n :key=\"node.id\"\r\n :label=\"node.name\"\r\n :value=\"node.id\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"配置\" prop=\"type\" v-show=\"listBtnShow\">\r\n <el-button type=\"primary\" @click=\"showNodeList\">配置</el-button>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"审批说明\" prop=\"approve\" v-if=\"textShow\">\r\n <el-input\r\n resize=\"none\"\r\n rows=\"3\"\r\n maxlength=\"500\"\r\n :autosize=\"{ minRows: 3, maxRows: 6 }\"\r\n show-word-limit\r\n type=\"textarea\"\r\n v-model=\"appForm.approve\"\r\n ></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </el-drawer>\r\n <el-drawer\r\n title=\"审批历史\"\r\n :visible.sync=\"timeLineShow\"\r\n direction=\"rtl\"\r\n custom-class=\"timeLineDrawer\"\r\n :modal=\"false\"\r\n size=\"45%\"\r\n :with-header=\"false\"\r\n >\r\n <time-line\r\n :timeLineShow=\"timeLineShow\"\r\n :traceNo=\"traceNo\"\r\n :bizMark=\"bizMark\"\r\n :taskDefId=\"taskDefId\"\r\n ></time-line>\r\n </el-drawer>\r\n <el-dialog\r\n title=\"加签列表\"\r\n :visible.sync=\"listShow\"\r\n custom-class=\"addNodelog\"\r\n :close-on-click-modal=\"false\"\r\n :close-on-press-escape=\"false\"\r\n :modal=\"false\"\r\n >\r\n <div>\r\n <el-button type=\"primary\" @click=\"handleAdd\">新增</el-button>\r\n </div>\r\n <mftcc-edit-table\r\n tableId=\"flowable/addNodeList\"\r\n :parentVm=\"this\"\r\n ref=\"nodeList\"\r\n ></mftcc-edit-table>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"listShow = false\">取 消</el-button>\r\n <el-button type=\"primary\" @click=\"saveNode\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer approve-footer\">\r\n <div style=\"text-align: center\">\r\n <el-button type=\"primary\" @click=\"approve\" v-if=\"query !== true\">{{\r\n approveBtnText\r\n }}</el-button>\r\n <el-button type=\"primary\" @click=\"openTimeLine\">审批历史</el-button>\r\n <el-button @click=\"cancel\">取 消</el-button>\r\n </div>\r\n </div>\r\n </el-dialog>\r\n <mftcc-dialog-table\r\n @callback=\"userDialogCallback\"\r\n :show.sync=\"userDialog\"\r\n :parentVm=\"this\"\r\n :option=\"userOption\"\r\n ></mftcc-dialog-table>\r\n <mftcc-plt-user-table\r\n @callback=\"userDialogCallback\"\r\n :show.sync=\"userAllDialog\"\r\n :parentVm=\"this\"\r\n :option=\"userAllOption\"\r\n ></mftcc-plt-user-table>\r\n <mftcc-dialog-radio\r\n :show.sync=\"nodeIdRadio\"\r\n :option=\"nodeIdOption\"\r\n @callback=\"nodeIdCallback\"\r\n >\r\n </mftcc-dialog-radio>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport timeLine from \"../flowable/timeLine\";\r\nimport api from \"../../api/flowable\";\r\nimport wkfUserDialog from \"../flowable/wkfUserDialog\";\r\nimport mftccIframe from \"../mftccIframe\";\r\n\r\nexport default {\r\n name: \"appDetail\",\r\n data() {\r\n return {\r\n page: null,\r\n page4app: null,\r\n timeLineShow: false,\r\n nodeShow: false,\r\n listShow: false,\r\n listBtnShow: false,\r\n textShow: true,\r\n approveShow: false,\r\n appFormShow: false,\r\n visible: this.show,\r\n approveBtnText: \"审 批\",\r\n appForm: {\r\n type: \"\",\r\n approve: \"\",\r\n },\r\n appFormRules: {\r\n type: [{ required: true, message: \"请选择审批类型\", trigger: \"change\" }],\r\n },\r\n messageShow: false,\r\n traceNo: \"\",\r\n procId: \"\",\r\n bizMark: \"\",\r\n approveGuide: \"\",\r\n approveBtnList: [],\r\n nodeList: [],\r\n userDialog: false,\r\n userAllDialog: false,\r\n userOption: {},\r\n userAllOption: {},\r\n nodeIdRadio: false,\r\n nodeIdOption: {},\r\n\r\n taskId: \"\",\r\n taskDefId: \"\",\r\n node: {\r\n id: \"\",\r\n seqList: \"\",\r\n },\r\n method: \"\",\r\n methodParam: {},\r\n appPageMethodParam: {},\r\n variablesMethod: \"\",\r\n variables: {},\r\n backNodeHasSearch: false,\r\n submitNodeHasSearch: false,\r\n backNodeList: [],\r\n submitNodeList: [],\r\n addNodeList: [],\r\n initData: [],\r\n clickIndex: \"\",\r\n finishType: 0,\r\n appFormId: \"\",\r\n appPage: null,\r\n appFormInitMethod: \"\",\r\n appPageDataMethod: \"\",\r\n appBizFormData: null,\r\n appClassName: \"\",\r\n appPageClassName: \"\",\r\n };\r\n },\r\n props: [\"show\", \"appData\", \"query\"],\r\n watch: {\r\n approveShow(val) {\r\n if (val === true) {\r\n this.approveBtnText = \"提 交\";\r\n this.$nextTick(() => {\r\n this.appFormShow = true;\r\n });\r\n } else {\r\n this.approveBtnText = \"审 批\";\r\n this.appFormShow = false;\r\n }\r\n },\r\n appData: {\r\n handler(row) {\r\n this.procId = row.PROC_INST_ID;\r\n if (!this.procId) {\r\n return;\r\n }\r\n this.bizMark = row.BIZ_ID;\r\n this.taskId = row.TASK_ID;\r\n this.taskDefId = row.TASK_DEF_ID;\r\n this.traceNo = row.TRACE_NO;\r\n this.finishType = row.finishType;\r\n this.getApprovalDetail(this.taskId, this.finishType);\r\n },\r\n immediate: true,\r\n },\r\n show() {\r\n this.visible = this.show;\r\n this.timeLineShow = false;\r\n this.nodeShow = false;\r\n this.textShow = true;\r\n this.listShow = false;\r\n this.listBtnShow = false;\r\n this.approveShow = false;\r\n this.page = null;\r\n this.page4app = null;\r\n if (this.show) {\r\n this.appForm = {\r\n type: \"\",\r\n approve: \"\",\r\n };\r\n this.$nextTick(() => {\r\n if (this.$refs.appForm) {\r\n this.$refs.appForm.clearValidate();\r\n }\r\n });\r\n let dragDom = this.$refs.appDetails.$el.firstChild;\r\n dragDom.style.top = 0;\r\n dragDom.style.left = 0;\r\n let DomClass = dragDom.className;\r\n DomClass = DomClass.replace(\"fullDialog\", \"\");\r\n dragDom.className = DomClass;\r\n this.getApprovalDetail(this.taskId, this.finishType);\r\n }\r\n },\r\n \"appForm.type\"(val) {\r\n let flag = false;\r\n for (let approveBtn of this.approveBtnList) {\r\n if (approveBtn.id == val && approveBtn.approveType == \"1\") {\r\n flag = true;\r\n break;\r\n }\r\n }\r\n if (!flag) {\r\n this.appFormRules.approve = [\r\n { required: true, message: \"请填写审批说明\", trigger: \"blur\" },\r\n ];\r\n } else {\r\n delete this.appFormRules.approve;\r\n }\r\n this.textShow = false;\r\n this.$nextTick(() => {\r\n this.textShow = true;\r\n });\r\n },\r\n },\r\n components: {\r\n timeLine,\r\n wkfUserDialog,\r\n mftccIframe,\r\n },\r\n methods: {\r\n handleAdd() {\r\n this.$refs.nodeList.addData();\r\n },\r\n userDialogGetAllCallback(value) {\r\n let fieldValue = \"\";\r\n for (let user of value) {\r\n fieldValue = user.id + \"|\" + fieldValue;\r\n }\r\n this.$refs.nodeList.setFormValue(this.clickIndex, \"assigneeId\", fieldValue);\r\n },\r\n saveNode() {\r\n this.listShow = false;\r\n this.addNodeList = this.$refs.nodeList.getFormValue().allData;\r\n },\r\n showNodeList() {\r\n if (this.listShow) {\r\n this.listShow = false;\r\n } else {\r\n this.listShow = true;\r\n }\r\n },\r\n goback() {\r\n this.listShow = false;\r\n },\r\n edit(index, row) {\r\n this.$refs.nodeList.editTable(index, true);\r\n },\r\n delete(index, row) {\r\n this.$refs.nodeList.editTable(index, false);\r\n },\r\n selectType() {\r\n let approveBtnSub = \"\";\r\n for (let approveBtn of this.approveBtnList) {\r\n if (approveBtn.id === this.appForm.type) {\r\n approveBtnSub = approveBtn;\r\n }\r\n }\r\n if (approveBtnSub.approveType == 5) {\r\n this.nodeShow = true;\r\n this.textShow = true;\r\n this.listBtnShow = false;\r\n this.listShow = false;\r\n this.node = \"\";\r\n if (this.backNodeHasSearch) {\r\n this.nodeList = this.backNodeList;\r\n } else {\r\n let data = {\r\n taskId: this.taskId,\r\n };\r\n api.getFinishNodeList(data, (res) => {\r\n if (res.code == 0) {\r\n this.nodeList = res.data.NodeList;\r\n this.backNodeList = res.data.NodeList;\r\n this.backNodeHasSearch = true;\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n }\r\n } else if (approveBtnSub.approveType == 2) {\r\n this.nodeShow = true;\r\n this.textShow = true;\r\n this.listBtnShow = false;\r\n this.listShow = false;\r\n this.node = \"\";\r\n if (this.submitNodeHasSearch) {\r\n this.nodeList = this.submitNodeList;\r\n } else {\r\n let data = {\r\n taskId: this.taskId,\r\n };\r\n api.getNextAllNodeList(data, (res) => {\r\n if (res.code == 0) {\r\n this.nodeList = res.data.NodeList;\r\n this.submitNodeList = res.data.NodeList;\r\n this.submitNodeHasSearch = true;\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n }\r\n } else if (approveBtnSub.approveType == 7 || approveBtnSub.approveType == 8) {\r\n this.textShow = false;\r\n this.nodeShow = false;\r\n this.listBtnShow = true;\r\n } else {\r\n this.nodeList = [];\r\n this.nodeShow = false;\r\n this.textShow = true;\r\n this.listBtnShow = false;\r\n this.listShow = false;\r\n }\r\n },\r\n nodeIdCallback(node) {\r\n this.node = node;\r\n if (node.needAssign === true) {\r\n if (node.assignList == \"getAll\") {\r\n this.userAllOption = {\r\n title: \"选择处理人\",\r\n };\r\n this.userAllDialog = true;\r\n } else {\r\n this.userOption = {\r\n title: \"选择处理人\",\r\n tableId: \"plt/flowableUserList\",\r\n search: false,\r\n type: \"radio\", //checkbox,radio\r\n data: [],\r\n value: [],\r\n initSearchData: {\r\n assignList: node.assignList,\r\n },\r\n isPagination: true,\r\n url: \"/mftcc-flowable-server/user/pageByUserId\",\r\n };\r\n this.userDialog = true;\r\n }\r\n } else {\r\n this.$confirm(\r\n \"此操作将提交该笔业务到\" + node.name + \"节点\",\r\n \"是否继续?\",\r\n \"提示\",\r\n {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n }\r\n ).then(() => {\r\n this.doCommit(node.id, node.seqList, \"\", \"\");\r\n });\r\n }\r\n },\r\n userDialogCallback(user) {\r\n let userId = \"\";\r\n if (user.length > 0) {\r\n for (let i = 0; i < user.length; i++) {\r\n userId += user[i].userId;\r\n if (i < user.length - 1) {\r\n userId += \",\";\r\n }\r\n }\r\n this.doCommit(this.node.id, this.node.seqList, userId, \"\");\r\n this.node = {\r\n id: \"\",\r\n seqList: this.node.seqList,\r\n };\r\n } else {\r\n this.$alert(\"请选择审批人员\", \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n }\r\n },\r\n cancel() {\r\n if (this.approveShow) {\r\n this.approveShow = false;\r\n } else {\r\n this.visible = false;\r\n }\r\n },\r\n closeMessage() {\r\n this.messageShow = false;\r\n },\r\n needOperated() {\r\n let approveBtnSub = \"\";\r\n for (let approveBtn of this.approveBtnList) {\r\n if (approveBtn.id === this.appForm.type) {\r\n approveBtnSub = approveBtn;\r\n }\r\n }\r\n api.needOperated(\r\n {\r\n taskId: this.taskId,\r\n approveType: approveBtnSub.approveType,\r\n variables: JSON.stringify(this.variables),\r\n },\r\n (res) => {\r\n if (res.code == 0) {\r\n if (res.hasComplete === 0) {\r\n let nodeList = res.result.nodeList;\r\n if (nodeList !== undefined && nodeList !== null) {\r\n this.nodeIdRadio = true;\r\n this.nodeIdOption = {\r\n realField: \"id\",\r\n showField: \"name\",\r\n search: true,\r\n insert: false,\r\n group: false,\r\n data: nodeList.list,\r\n value: \"\",\r\n };\r\n } else {\r\n this.node = {\r\n id: res.result.targetFlowId,\r\n seqList: res.result.seqList[0],\r\n };\r\n if (res.result.assignList == \"getAll\") {\r\n this.userAllOption = {\r\n title: \"选择处理人\",\r\n };\r\n this.userAllDialog = true;\r\n } else {\r\n this.userOption = {\r\n title: \"选择处理人\",\r\n tableId: \"plt/flowableUserList\",\r\n search: false,\r\n type: \"checkbox\", //checkbox,radio\r\n data: [],\r\n value: [],\r\n initSearchData: {\r\n assignList: res.result.assignList,\r\n },\r\n isPagination: true,\r\n url: \"/mftcc-flowable-server/user/pageByUserId\",\r\n };\r\n this.userDialog = true;\r\n }\r\n }\r\n } else {\r\n this.doCommit();\r\n }\r\n } else {\r\n this.$alert(res.msg, \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n }\r\n }\r\n );\r\n },\r\n doCommit(targetNodeId, seqList, nextUserId, listStr) {\r\n let approveBtnSub = \"\";\r\n for (let approveBtn of this.approveBtnList) {\r\n if (approveBtn.id === this.appForm.type) {\r\n approveBtnSub = approveBtn;\r\n }\r\n }\r\n let flowType = \"\";\r\n if (seqList != null || nextUserId != null) {\r\n flowType = \"11\";\r\n } else {\r\n flowType = approveBtnSub.approveType;\r\n }\r\n if (approveBtnSub.approveType == 2 || approveBtnSub.approveType == 5) {\r\n targetNodeId = this.node;\r\n }\r\n if (approveBtnSub.approveType == 7 || approveBtnSub.approveType == 8) {\r\n if (this.addNodeList.length == 0) {\r\n this.$alert(\"请配置节点信息\", \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n return;\r\n } else {\r\n var nodes = [];\r\n for (var i = 0; i < this.addNodeList.length; i++) {\r\n var node = {};\r\n node[\"name\"] = this.addNodeList[i].nodeName;\r\n node[\"assignee\"] = this.addNodeList[i].assigneeId;\r\n nodes.push(node);\r\n }\r\n listStr = JSON.stringify(nodes);\r\n }\r\n }\r\n let data = {\r\n taskId: this.taskId,\r\n flowType: flowType,\r\n approvalContents: this.appForm.approve,\r\n approveBtnId: approveBtnSub.id,\r\n approveBtnName: approveBtnSub.approveIdea,\r\n targetNodeId: targetNodeId,\r\n listStr: listStr,\r\n nextUserId: nextUserId,\r\n seqList: seqList,\r\n bizMark: this.bizMark,\r\n variables: this.variables,\r\n methodParam: this.methodParam,\r\n };\r\n\r\n if (this.appBizFormData) {\r\n data.appBizFormData = JSON.stringify(this.appBizFormData);\r\n }\r\n if (this.appPageDataMethod) {\r\n if (typeof this.$refs.componentAppPage[this.appPageDataMethod] == \"function\") {\r\n const innerPageData = this.$refs.componentAppPage[this.appPageDataMethod](\r\n (res) => {\r\n data.appPageData = res;\r\n this.doCommit4Iframe(data);\r\n }\r\n );\r\n } else {\r\n this.$alert(\r\n \"未找到审批弹层页面数据回调函数【\" + this.appPageDataMethod + \"】\",\r\n \"提示\",\r\n {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n }\r\n );\r\n }\r\n } else {\r\n this.doCommit4Iframe(data);\r\n }\r\n },\r\n doCommit4Iframe(data) {\r\n this.approveShow = false;\r\n if (typeof this.$refs.component[this.method] == \"function\") {\r\n this.$refs.component[this.method](JSON.stringify(data), (res) => {\r\n if (res.code == 0) {\r\n this.$message.success(res.msg);\r\n this.visible = false;\r\n this.$emit(\"submitSuccess\");\r\n } else {\r\n this.$alert(res.msg, \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n }\r\n });\r\n } else {\r\n this.$alert(\"未找到审批提交函数【\" + this.method + \"】\", \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n }\r\n },\r\n approve() {\r\n if (this.approveShow) {\r\n if (this.appFormId != \"\") {\r\n this.$refs.appBizForm.validateForm((valid) => {\r\n if (valid === true) {\r\n this.appBizFormData = this.$refs.appBizForm.getFormValue();\r\n this.appFormSubmit();\r\n }\r\n });\r\n } else {\r\n this.appFormSubmit();\r\n }\r\n } else {\r\n this.approveShow = true;\r\n if (this.appFormId != \"\") {\r\n if (this.appFormInitMethod) {\r\n if (typeof this.$refs.component[this.appFormInitMethod] == \"function\") {\r\n this.$refs.component[this.appFormInitMethod]((res) => {\r\n this.$refs.appBizForm.setFormValue(res);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n },\r\n appFormSubmit() {\r\n this.$refs.appForm.validate((valid) => {\r\n if (valid === true) {\r\n this.$confirm(\"此操作将提交该笔业务, 是否继续?\", \"提示\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n }).then(() => {\r\n if (!this.method) {\r\n this.$alert(\"缺少审批提交函数\", \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n return;\r\n }\r\n if (this.variablesMethod) {\r\n if (typeof this.$refs.component[this.variablesMethod] == \"function\") {\r\n let formData = {};\r\n if (this.$refs.appBizForm) {\r\n formData = this.$refs.appBizForm.getFormValue();\r\n }\r\n this.$refs.component[this.variablesMethod](formData, (res) => {\r\n this.variables = res;\r\n this.needOperated();\r\n });\r\n }\r\n } else {\r\n this.needOperated();\r\n }\r\n });\r\n }\r\n });\r\n },\r\n showMessage() {\r\n this.$message({\r\n type: \"warning\",\r\n dangerouslyUseHTMLString: true,\r\n message: \"<strong>这是 <i>HTML</i> 片段</strong>\",\r\n });\r\n },\r\n openTimeLine() {\r\n if (this.timeLineShow) {\r\n this.timeLineShow = false;\r\n } else {\r\n this.timeLineShow = true;\r\n }\r\n },\r\n getApprovalDetail(taskId, taskType) {\r\n let data = {\r\n taskId: taskId,\r\n taskType: taskType,\r\n bizMark: this.bizMark,\r\n };\r\n api.getApprovalDetail(data, (res) => {\r\n if (res.code == 0) {\r\n debugger;\r\n this.backNodeHasSearch = false;\r\n this.submitNodeHasSearch = false;\r\n\r\n this.methodParam = res.data.methodParam || {};\r\n this.methodParam.traceNo = this.traceNo;\r\n\r\n this.method = res.data.method;\r\n this.variablesMethod = res.data.variablesMethod;\r\n if (res.data.showGuide) {\r\n this.messageShow = true;\r\n } else {\r\n this.messageShow = false;\r\n }\r\n\r\n this.resAppPage(res.data.formUrl);\r\n\r\n if (res.data.approveGuide) {\r\n this.approveGuide = res.data.approveGuide.guide;\r\n }\r\n this.approveBtnList = res.data.approveBtnList;\r\n this.appPage = res.data.appPage;\r\n\r\n this.resAppPageInner(this.appPage);\r\n if (!this.appPage) {\r\n this.appFormId = res.data.appFormId;\r\n this.appFormInitMethod = res.data.appFormInitMethod;\r\n }\r\n this.appPageMethodParam = res.data.appPageMethodParam || {};\r\n this.appPageDataMethod = res.data.appPageDataMethod;\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n },\r\n resAppPage(pagePath) {\r\n this.page = null;\r\n const pathObj = this.resPath(pagePath);\r\n this.getApp(pathObj, \"out\");\r\n },\r\n resAppPageInner(pagePath) {\r\n this.page4app = null;\r\n const pathObj = this.resPath(pagePath);\r\n this.getApp(pathObj, \"in\");\r\n },\r\n getApp(pathObj, state) {\r\n if (!pathObj) {\r\n return;\r\n }\r\n this.$singleSpa\r\n .toLoadPromise(this.$singleSpa.getApp(pathObj.productName))\r\n .then((res) => {\r\n res.loadApp().then((res) => {\r\n const apps = res.default;\r\n const app = apps[pathObj.spaPath];\r\n if (state == \"out\") {\r\n this.page = app;\r\n this.appClassName = pathObj.productName;\r\n } else if (state == \"in\") {\r\n this.page4app = app;\r\n this.appPageClassName = pathObj.productName;\r\n }\r\n });\r\n });\r\n },\r\n resPath(pagePath) {\r\n if (!pagePath) {\r\n return null;\r\n }\r\n pagePath = pagePath.replace(/\\s+/g, \"\");\r\n if (/.vue$/.test(pagePath)) {\r\n pagePath = pagePath.substring(0, pagePath.length - 4);\r\n }\r\n if (pagePath.startsWith(\"/\")) {\r\n pagePath = pagePath.substring(1);\r\n }\r\n let productName = pagePath.split(\"/\")[0];\r\n let spaPath = pagePath.substring(productName.length);\r\n return { productName, spaPath };\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.appDialog {\r\n margin-top: 6vh !important;\r\n width: 90%;\r\n height: 90%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.fullDialog {\r\n margin: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.appDialog > .el-dialog__body {\r\n height: calc(100% - 52px);\r\n padding: 30px 20px 10px 20px;\r\n overflow: auto;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content {\r\n height: 100%;\r\n overflow: auto;\r\n position: relative;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content > .component {\r\n height: calc(100% - 78px);\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content > .component-full {\r\n height: calc(100% - 20px);\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog .el-drawer__wrapper {\r\n position: absolute;\r\n /* margin-bottom: 70px; */\r\n}\r\n.approveDrawer,\r\n.timeLineDrawer {\r\n outline: none;\r\n padding: 25px;\r\n height: auto !important;\r\n overflow: auto;\r\n max-height: 100%;\r\n flex-direction: row;\r\n}\r\n.approveDrawer.appPage {\r\n height: 100% !important;\r\n}\r\n.timeLineDrawer > .el-drawer__body {\r\n height: 100%;\r\n}\r\n.addNodelog {\r\n height: 60%;\r\n}\r\n.addNodelog > .el-dialog__body {\r\n height: 70%;\r\n overflow-y: auto;\r\n}\r\n.addNodelog > .el-dialog__body > .dialog-content {\r\n height: 100%;\r\n}\r\n.addNodelog > .el-dialog__body > .dialog-content > .component {\r\n height: 90%;\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog .appFormRow {\r\n margin-bottom: 22px;\r\n height: calc(100% - 160px);\r\n overflow: auto;\r\n border-bottom: 1px solid #f1f1f1;\r\n}\r\n.appDialog .appFormRow2 {\r\n text-align: left;\r\n height: 160px;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.appDialog {\r\n margin-top: 6vh !important;\r\n width: 90%;\r\n height: 90%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.fullDialog {\r\n margin: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.appDialog > .el-dialog__body {\r\n height: calc(100% - 52px);\r\n padding: 30px 20px 10px 20px;\r\n overflow: auto;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content {\r\n height: 100%;\r\n overflow: auto;\r\n position: relative;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content > .component {\r\n height: calc(100% - 78px);\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content > .component-full {\r\n height: calc(100% - 20px);\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog .el-drawer__wrapper {\r\n position: absolute;\r\n /* margin-bottom: 70px; */\r\n}\r\n.approveDrawer,\r\n.timeLineDrawer {\r\n outline: none;\r\n padding: 25px;\r\n height: auto !important;\r\n overflow: auto;\r\n max-height: 100%;\r\n -webkit-box-orient: horizontal;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: row;\r\n flex-direction: row;\r\n}\r\n.approveDrawer.appPage {\r\n height: 100% !important;\r\n}\r\n.timeLineDrawer > .el-drawer__body {\r\n height: 100%;\r\n}\r\n.addNodelog {\r\n height: 60%;\r\n}\r\n.addNodelog > .el-dialog__body {\r\n height: 70%;\r\n overflow-y: auto;\r\n}\r\n.addNodelog > .el-dialog__body > .dialog-content {\r\n height: 100%;\r\n}\r\n.addNodelog > .el-dialog__body > .dialog-content > .component {\r\n height: 90%;\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog .appFormRow {\r\n margin-bottom: 22px;\r\n height: calc(100% - 160px);\r\n overflow: auto;\r\n border-bottom: 1px solid #f1f1f1;\r\n}\r\n.appDialog .appFormRow2 {\r\n text-align: left;\r\n height: 160px;\r\n}\r\n","<template>\r\n <el-steps :space=\"space\" :active=\"active\" class=\"flow-steps\" ref=\"flowSteps\">\r\n <el-step v-for=\"item in stepData\" :key=\"item.id\">\r\n <template slot=\"icon\" >\r\n <img v-if=\"item.active\" src=\"../../assets/flowable/active.png\">\r\n <i v-else-if=\"item.stoped\" class=\"icon\"></i>\r\n <i v-else class=\"icon\"></i>\r\n </template>\r\n <template slot=\"title\">\r\n <span :class=\"'title '+item.class\">{{ item.name }}</span>\r\n </template>\r\n </el-step>\r\n </el-steps>\r\n</template>\r\n\r\n<script>\r\nimport api from '../../api/flowable'\r\nexport default {\r\n name:\"bizTimeLine\",\r\n title:\"bizTimeLine\",\r\n data() {\r\n return {\r\n stepData: [],\r\n active: -1,\r\n space:106\r\n }\r\n },\r\n props: [\"traceNo\",\"bizMark\",\"option\"],\r\n created(){\r\n this.init();\r\n },\r\n methods: {\r\n refresh(){\r\n this.init();\r\n },\r\n init(){\r\n let param = {};\r\n if(this.option){\r\n param.option = this.option;\r\n }else{\r\n param.traceNo = this.traceNo;\r\n param.bizMark = this.bizMark;\r\n }\r\n this.simulationByTraceNo(param);\r\n },\r\n simulationByTraceNo(param){\r\n api.simulationByTraceNo(param, res => {\r\n if(res.code == 0){\r\n let array = [];\r\n let task = res.task;\r\n let isEnd = res.isEnd;\r\n if(!task){\r\n task = {\r\n isEnd,\r\n isSuspended:false\r\n }\r\n }else{\r\n task.isEnd = isEnd;\r\n task.isSuspended = false;\r\n }\r\n let nodes = res.data.node;\r\n for(let i in nodes){\r\n let node = nodes[i];\r\n if(this.resLineNode(node)){\r\n let item = {\r\n id:node.id,\r\n name:node.name,\r\n class:\"\"\r\n };\r\n if(task&&task.TASK_DEF_ID == node.id){\r\n if(task.APPROVE_TYPE == \"stoped\"){\r\n item.stoped = true;\r\n }else{\r\n item.active = true;\r\n if(!task.TASK_NAME){\r\n task.TASK_NAME = node.name;\r\n }\r\n if(node.documentation == \"org.flowable.bpmn.model.ReceiveTask\"){\r\n task.isSuspended = true;\r\n }\r\n }\r\n this.active = array.length;\r\n }\r\n array.push(item);\r\n }\r\n }\r\n if(this.active == -1|| isEnd == true){\r\n this.active = array.length;\r\n }\r\n this.$emit('getTask',task);\r\n this.stepData = array;\r\n \r\n let el = this.$refs.flowSteps.$el;\r\n let width = el.clientWidth;\r\n if(width/106<array.length){\r\n this.space = 61;\r\n el.classList.add(\"up\");\r\n for(let a in array){\r\n if(a%2 != 0){\r\n array[a].class = \"up\";\r\n }\r\n }\r\n }else{\r\n this.space = '10%';\r\n }\r\n\r\n }else{\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n },\r\n resLineNode(node){\r\n let nodeTypeObj = node.attributes.nodeType;\r\n if(nodeTypeObj&&nodeTypeObj[0].value == \"bizTask\"){//业务任务\r\n return true;\r\n }else if(node.documentation == \"org.flowable.bpmn.model.CallActivity\"){//子流程\r\n return true;\r\n }else if(node.documentation == \"org.flowable.bpmn.model.ServiceTask\"){//服务任务\r\n return false;\r\n }else if(node.documentation == \"org.flowable.bpmn.model.ReceiveTask\"){//接收任务\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n}\r\n</script>\r\n<style>\r\n.flow-steps{\r\n padding-top: 16px;\r\n height: 62px;\r\n background: #FFF;\r\n}\r\n.flow-steps.up{\r\n padding-top: 24px;\r\n}\r\n.flow-steps .el-step__icon.is-text{\r\n height: 12px;\r\n width: 12px;\r\n top: 9px;\r\n position: absolute;\r\n}\r\n.flow-steps .is-process .el-step__icon.is-text{\r\n border:none;\r\n top: 10px;\r\n}\r\n.flow-steps .is-finish .el-step__icon.is-text{\r\n border: 1px solid #5D92DD;\r\n}\r\n.flow-steps .is-wait .el-step__icon.is-text{\r\n border: 1px solid #CFDDF1;\r\n}\r\n.flow-steps .el-step.is-horizontal .el-step__line{\r\n height: 12px;\r\n top: 9px;\r\n left: 6px;\r\n right: -6px;\r\n}\r\n.flow-steps .is-finish .el-step__line{\r\n background-image: linear-gradient(#7BA8E8,#79A7E8, #5D92DD);\r\n}\r\n\r\n.flow-steps .is-process .el-step__line,\r\n.flow-steps .is-wait .el-step__line{\r\n background-color:#E8EFF8 ;\r\n}\r\n.flow-steps .el-step__title{\r\n line-height: unset;\r\n font-size: 14px;\r\n font-weight: unset;\r\n width: 90px;\r\n margin-left: -14px;\r\n}\r\n.flow-steps .el-step .el-step__main{\r\n top: 36px;\r\n position: absolute;\r\n}\r\n.flow-steps .el-step .el-step__main:nth-child(2){\r\n top: 36px;\r\n position: absolute;\r\n}\r\n.flow-steps .title{\r\n text-align: center;\r\n display: block;\r\n}\r\n.flow-steps .is-finish .title{\r\n color: #3D3D3D;\r\n}\r\n.flow-steps .is-process .title{\r\n color:rgba(75,125,196,0.8);\r\n}\r\n.flow-steps .title.up{\r\n margin-top: -60px;\r\n}\r\n.flow-steps .is-wait .title{\r\n color: #999999;\r\n}\r\n.flow-steps .el-step__head{\r\n margin-left: 26px;\r\n}\r\n.flow-steps .el-step__line-inner{\r\n border: none;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.flow-steps{\r\n padding-top: 16px;\r\n height: 62px;\r\n background: #FFF;\r\n}\r\n.flow-steps.up{\r\n padding-top: 24px;\r\n}\r\n.flow-steps .el-step__icon.is-text{\r\n height: 12px;\r\n width: 12px;\r\n top: 9px;\r\n position: absolute;\r\n}\r\n.flow-steps .is-process .el-step__icon.is-text{\r\n border:none;\r\n top: 10px;\r\n}\r\n.flow-steps .is-finish .el-step__icon.is-text{\r\n border: 1px solid #5D92DD;\r\n}\r\n.flow-steps .is-wait .el-step__icon.is-text{\r\n border: 1px solid #CFDDF1;\r\n}\r\n.flow-steps .el-step.is-horizontal .el-step__line{\r\n height: 12px;\r\n top: 9px;\r\n left: 6px;\r\n right: -6px;\r\n}\r\n.flow-steps .is-finish .el-step__line{\r\n background-image: -webkit-gradient(linear,left top, left bottom,from(#7BA8E8),color-stop(#79A7E8), to(#5D92DD));\r\n background-image: linear-gradient(#7BA8E8,#79A7E8, #5D92DD);\r\n}\r\n.flow-steps .is-process .el-step__line,\r\n.flow-steps .is-wait .el-step__line{\r\n background-color:#E8EFF8 ;\r\n}\r\n.flow-steps .el-step__title{\r\n line-height: unset;\r\n font-size: 14px;\r\n font-weight: unset;\r\n width: 90px;\r\n margin-left: -14px;\r\n}\r\n.flow-steps .el-step .el-step__main{\r\n top: 36px;\r\n position: absolute;\r\n}\r\n.flow-steps .el-step .el-step__main:nth-child(2){\r\n top: 36px;\r\n position: absolute;\r\n}\r\n.flow-steps .title{\r\n text-align: center;\r\n display: block;\r\n}\r\n.flow-steps .is-finish .title{\r\n color: #3D3D3D;\r\n}\r\n.flow-steps .is-process .title{\r\n color:rgba(75,125,196,0.8);\r\n}\r\n.flow-steps .title.up{\r\n margin-top: -60px;\r\n}\r\n.flow-steps .is-wait .title{\r\n color: #999999;\r\n}\r\n.flow-steps .el-step__head{\r\n margin-left: 26px;\r\n}\r\n.flow-steps .el-step__line-inner{\r\n border: none;\r\n}\r\n","<template>\r\n <el-dialog\r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n :close-on-click-modal=\"false\"\r\n class=\"wkf-user-Dialog\"\r\n >\r\n <div slot=\"title\" class=\"dialog-header\">\r\n <label>选择人员</label>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-row>\r\n <el-col :span=\"12\" class=\"br-tree\">\r\n <div class=\"content\">\r\n <el-tree\r\n :data=\"treeData\"\r\n node-key=\"id\"\r\n highlight-current\r\n check-strictly\r\n :default-expanded-keys=\"expandedKeys\"\r\n :show-checkbox=\"false\"\r\n :props=\"defaultProps\"\r\n :filter-node-method=\"filterNode\"\r\n :expand-on-click-node=\"false\"\r\n @current-change=\"handleCheck\"\r\n ref=\"tree\"\r\n style=\"padding: 20px 0px 0 20px\"\r\n >\r\n </el-tree>\r\n </div>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <div class=\"user-group\">\r\n <template>\r\n <el-radio-group v-model=\"userCheck\">\r\n <el-radio v-for=\"user in userArray\" :key=\"user.id\" :label=\"user.id\"\r\n >{{ user.title }}\r\n </el-radio>\r\n </el-radio-group>\r\n </template>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport { get, postJson } from \"../../axios\";\r\nexport default {\r\n data() {\r\n return {\r\n title: \"选择人员\",\r\n visible: this.show,\r\n defaultProps: {\r\n children: \"children\",\r\n label: \"title\",\r\n },\r\n expandedKeys: [],\r\n treeData: [],\r\n userArray: [],\r\n userCheck: [],\r\n allUserArray: [],\r\n checkAll: false,\r\n isIndeterminate: false,\r\n };\r\n },\r\n props: [\"show\", \"initData\", \"type\", \"searchData\"],\r\n watch: {\r\n show() {\r\n this.visible = this.show;\r\n if (this.visible === true) {\r\n this.getTreeData();\r\n }\r\n },\r\n },\r\n created() {\r\n this.getTreeData();\r\n },\r\n methods: {\r\n userCheckedChange() {\r\n let checkedCount = 0;\r\n for (let user of this.userArray) {\r\n if (this.userCheck.indexOf(user.id) != -1) {\r\n checkedCount += 1;\r\n }\r\n }\r\n this.checkAll = checkedCount > 0 && checkedCount === this.userArray.length;\r\n this.isIndeterminate = checkedCount > 0 && checkedCount < this.userArray.length;\r\n },\r\n userChange(value) {\r\n if (value === true) {\r\n this.$refs.userSelect.blur();\r\n }\r\n },\r\n getUsers(data, users) {\r\n if (!(users instanceof Array)) {\r\n users = [];\r\n }\r\n for (let treeNode of data) {\r\n if (treeNode.user instanceof Array) {\r\n users = users.concat(treeNode.user);\r\n }\r\n if (treeNode.children instanceof Array) {\r\n users = this.getUsers(treeNode.children, users);\r\n }\r\n }\r\n return users;\r\n },\r\n getTreeData() {\r\n this.userArray = [];\r\n this.treeData = [];\r\n this.isIndeterminate = false;\r\n let data = this.searchData || {};\r\n postJson(\r\n \"/mftcc-flowable-server/br/listForTreeAll\",\r\n data,\r\n true,\r\n (res) => {\r\n this.searchData.pageNo = \"1\";\r\n this.searchData.pageSize = \"-1\";\r\n postJson(\r\n \"/mftcc-sys-server/sys/sysUser/findByPage\",\r\n this.searchData,\r\n true,\r\n (result) => {\r\n if (result.code == 0) {\r\n for (var i = 0; i < res.data.length; i++) {\r\n var showData = res.data[i];\r\n showData.user = [];\r\n for (var j = 0, len = result.list.records.length; j < len; j++) {\r\n if (result.list.records[j].brNo == showData.id) {\r\n var user = {};\r\n user[\"id\"] = result.list.records[j].opNo.toString();\r\n user[\"title\"] = result.list.records[j].opName.toString();\r\n showData.user.push(user);\r\n }\r\n }\r\n }\r\n this.treeData = res.data;\r\n this.allUserArray = this.unique(this.getUsers(res.data));\r\n if (typeof this.initData == \"string\") {\r\n this.userCheck = this.initData;\r\n } else {\r\n this.userCheck = \"\";\r\n }\r\n }\r\n }\r\n );\r\n },\r\n (error) => {\r\n this.userCheck = [];\r\n }\r\n );\r\n },\r\n submit() {\r\n if (this.userCheck != null && this.userCheck != \"\") {\r\n let result = [];\r\n for (let user of this.allUserArray) {\r\n if (user.id === this.userCheck) {\r\n result.push(user);\r\n }\r\n }\r\n\r\n this.$emit(\"callback\", result);\r\n this.visible = false;\r\n } else {\r\n this.$message(\"请选择审批人\");\r\n }\r\n },\r\n filterNode(value, data) {\r\n if (!value) return true;\r\n return data[dp.label].indexOf(value) !== -1;\r\n },\r\n unique(arr1) {\r\n const res = new Map();\r\n return arr1.filter((a) => !res.has(a.id) && res.set(a.id, 1));\r\n },\r\n handleCheck(currentObj, treeStatus) {\r\n if (currentObj.user instanceof Array) {\r\n this.userArray = this.unique(currentObj.user);\r\n } else {\r\n this.userArray = [];\r\n }\r\n this.userCheckedChange();\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.wkf-user-Dialog .el-tree {\r\n height: 300px;\r\n overflow: auto;\r\n}\r\n.wkf-user-Dialog .el-dialog {\r\n width: 500px;\r\n}\r\n.wkf-user-Dialog .dialog-header {\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n.wkf-user-Dialog .dialog-header label {\r\n position: absolute;\r\n left: 20px;\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row {\r\n border: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .br-tree {\r\n border-right: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .user-group {\r\n padding: 20px 0px 0 20px;\r\n width: 209px;\r\n height: 300px;\r\n overflow-y: auto;\r\n}\r\n.el-tree-node__label {\r\n font-size: 14px;\r\n}\r\n.user-group .el-radio {\r\n width: 75%;\r\n margin: 10px;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.wkf-user-Dialog .el-tree {\r\n height: 300px;\r\n overflow: auto;\r\n}\r\n.wkf-user-Dialog .el-dialog {\r\n width: 500px;\r\n}\r\n.wkf-user-Dialog .dialog-header {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: end;\r\n -ms-flex-pack: end;\r\n justify-content: flex-end;\r\n}\r\n.wkf-user-Dialog .dialog-header label {\r\n position: absolute;\r\n left: 20px;\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row {\r\n border: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .br-tree {\r\n border-right: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .user-group {\r\n padding: 20px 0px 0 20px;\r\n width: 209px;\r\n height: 300px;\r\n overflow-y: auto;\r\n}\r\n.el-tree-node__label {\r\n font-size: 14px;\r\n}\r\n.user-group .el-radio {\r\n width: 75%;\r\n margin: 10px;\r\n}\r\n","<template>\r\n <div class=\"mftcc-form-item\">\r\n <template v-for=\"(group,index) in props.group\">\r\n <el-col\r\n :key=\"index + 'field'\"\r\n :span=\"Math.floor((24-((props.group.length-1)*2))/props.group.length)\"\r\n >\r\n <template v-if=\"designer === true\">\r\n <form-item\r\n v-model=\"group.value\"\r\n v-bind=\"{props:group}\"\r\n :class=\"{'is-helper':showHelper===group, 'is-select':editField===group}\"\r\n :designer=\"designer\"\r\n @mouseenter.native=\"handleMouseEnter(group)\"\r\n @mouseleave.native=\"handleMouseLeave(group)\"\r\n @click.native.stop=\"handleClick(group)\"\r\n >\r\n <div slot=\"widgets-tools\" class=\"group-tools\">\r\n <i class=\"el-icon-circle-plus-outline\" @click=\"addRow(index)\"></i>\r\n <i class=\"el-icon-remove-outline\" @click=\"delRow(index)\"></i>\r\n </div>\r\n </form-item>\r\n </template>\r\n <template v-else>\r\n <form-item\r\n v-model=\"value\"\r\n v-bind=\"{props:group}\"\r\n :designer=\"designer\"\r\n >\r\n </form-item>\r\n </template> \r\n </el-col>\r\n <el-col\r\n v-if=\"index !== (props.group.length-1)\"\r\n :key=\"index + 'line'\"\r\n :span=\"2\"\r\n style=\"text-align: center;\"\r\n >{{ isEmpty(props.separator)?'-':props.separator }}</el-col>\r\n </template>\r\n </div>\r\n</template>\r\n<script>\r\nimport formUtil from \"../../utils/formUtil\";\r\nexport default {\r\n data() {\r\n return {\r\n showHelper: null,\r\n editField: null,\r\n isEmpty: formUtil.isEmpty,\r\n groupItem: {}\r\n };\r\n },\r\n model: {\r\n prop: \"value\", //值可以随意命名\r\n event: \"returnBack\" //方法也可以随意命名\r\n },\r\n props: {\r\n value:{},\r\n designer: {\r\n type: Boolean,\r\n default() {\r\n return false;\r\n }\r\n },\r\n props: {\r\n type: Object,\r\n default() {\r\n return {};\r\n }\r\n }\r\n },\r\n methods: {\r\n handleMouseEnter(item) {\r\n if (this.$dragula.dragging) return;\r\n this.showHelper = item;\r\n },\r\n handleMouseLeave(item) {\r\n this.showHelper = null;\r\n },\r\n handleClick(item) {\r\n this.editField = item;\r\n this.$store.commit(\"set_editField\", item);\r\n },\r\n addRow(index) {\r\n let groupItem = Object.assign({}, this.groupItem);\r\n this.props.group.splice(index + 1, 0, groupItem);\r\n },\r\n delRow(index) {\r\n this.props.group.splice(index, 1);\r\n }\r\n },\r\n created() {\r\n this.groupItem = Object.assign({}, this.props.group[0]);\r\n }\r\n};\r\n</script>\r\n<style scoped>\r\n.group-tools {\r\n position: absolute;\r\n right: 0px;\r\n top: 0px;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n}\r\n.group-tools i {\r\n margin: 3px 0px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.group-tools {\r\n position: absolute;\r\n right: 0px;\r\n top: 0px;\r\n height: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n}\r\n.group-tools i {\r\n margin: 3px 0px;\r\n}\r\n","<template>\r\n <el-alert\r\n :title=\"props.label\"\r\n type=\"success\"\r\n effect=\"dark\"\r\n class=\"title_label\"\r\n :closable=\"false\" style=\"margin-bottom: 22px;\"\r\n :class=\"designer===true?'mftcc-alert':''\">\r\n </el-alert>\r\n</template>\r\n<script>\r\nexport default {\r\n data() {\r\n return {\r\n title:\"标题\",\r\n }\r\n },\r\n props: {\r\n props: {\r\n type: Object,\r\n default() {\r\n return {};\r\n }\r\n },\r\n designer: {\r\n type: Boolean,\r\n default() {\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n</script>\r\n<style>\r\n.title_label{\r\n margin: 0 !important;\r\n border-radius: 0;\r\n background-color: #EDF2FA !important;\r\n color: rgba(20,20,20,1) !important;\r\n font-weight: 400;\r\n}\r\n.title_label .el-alert__title{\r\n font-size: 16px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.title_label{\r\n margin: 0 !important;\r\n border-radius: 0;\r\n background-color: #EDF2FA !important;\r\n color: rgba(20,20,20,1) !important;\r\n font-weight: 400;\r\n}\r\n.title_label .el-alert__title{\r\n font-size: 16px;\r\n}\r\n","<template>\r\n <el-form\r\n :label-position=\"option.labelPosition\"\r\n :model=\"formData\"\r\n :rules=\"rules\"\r\n :ref=\"formId\"\r\n :disabled=\"isEmpty(option.formDisabled) ? false : option.formDisabled\"\r\n label-width=\"150px\"\r\n :class=\"\r\n search === 'search'\r\n ? 'mftcc-form-search'\r\n : option.isExpand === true\r\n ? 'mftcc-form-expand'\r\n : option.query === 'query'\r\n ? 'mftcc-form-query'\r\n : 'mftcc-form'\r\n \"\r\n @submit.native.prevent\r\n >\r\n <el-table\r\n v-if=\"formFlag\"\r\n :data=\"tableData\"\r\n :show-header=\"false\"\r\n :span-method=\"rowColMergeHandler\"\r\n :row-style=\"rowStyleHandler\"\r\n empty-text=\" \"\r\n :class=\"isEmpty(option.formDisabled) ? '' : 'is-disabled'\"\r\n >\r\n <el-table-column\r\n v-for=\"(item, index) in tableCol\"\r\n :key=\"item.index\"\r\n :prop=\"item.index\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <form-item\r\n :props=\"scope.row[index + '']\"\r\n v-model=\"formData\"\r\n @click.native=\"\r\n scope.row[index + ''] && clickFunc(scope.row[index + ''], $event)\r\n \"\r\n :event=\"scope.row[index + ''] && events[scope.row[index + ''].fieldName]\"\r\n :pramDicItem=\"\r\n scope.row[index + ''] && pramDicItem[scope.row[index + ''].fieldName]\r\n \"\r\n :query=\"option.query\"\r\n ></form-item>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n\r\n <form-item\r\n v-for=\"(item, index) in hiddenItem\"\r\n :key=\"index\"\r\n :props=\"item\"\r\n v-model=\"formData\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n :event=\"events[item.fieldName]\"\r\n :pramDicItem=\"pramDicItem[item.fieldName]\"\r\n :query=\"option.query\"\r\n ></form-item>\r\n </el-form>\r\n</template>\r\n<script>\r\nimport { get, postJson, putJson, sync, getParameter } from \"../../../axios\";\r\nimport formUtil from \"../../../utils/formUtil\";\r\nexport default {\r\n props: [\"formId\", \"parentVm\", \"initData\", \"search\"],\r\n data() {\r\n return {\r\n formFlag: false,\r\n option: {},\r\n formData: {},\r\n events: {},\r\n pramDicItem: {},\r\n rules: {},\r\n isEmpty: formUtil.isEmpty,\r\n dateFormat: formUtil.dateFormat,\r\n original: null,\r\n hiddenItem: [],\r\n };\r\n },\r\n provide() {\r\n return {\r\n formData: this.formData,\r\n formItem: this.option.formItem,\r\n };\r\n },\r\n watch: {\r\n formData: {\r\n handler(val, oldVal) {\r\n let formItems = this.getFormItems(this.option.formItem);\r\n for (let j in formItems) {\r\n if (formItems[j].optionType === \"3\") {\r\n let searchData = {};\r\n let searchDataStr = formItems[j].library.searchDataStr || \"\";\r\n let searchDataArray = searchDataStr.split(\";\");\r\n for (let i in searchDataArray) {\r\n if (!this.isEmpty(searchDataArray[i])) {\r\n let searchDataObj = searchDataArray[i].split(\"-\");\r\n if (searchDataObj.length === 2) {\r\n let value = \"\";\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(searchDataObj[1]) == true) {\r\n let parm = searchDataObj[1].replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n } else {\r\n value = searchDataObj[1];\r\n }\r\n searchData[searchDataObj[0]] = value;\r\n }\r\n }\r\n }\r\n this.$set(formItems[j].library, \"searchData\", searchData);\r\n } else if (formItems[j].fieldType === \"pltuser\") {\r\n let brNo = formItems[j].option.brNo;\r\n let value = \"\";\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(brNo) == true) {\r\n let parm = brNo.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n } else {\r\n value = brNo;\r\n }\r\n this.$set(formItems[j].option, \"brNoVal\", value);\r\n let params = formItems[j].option.params;\r\n if (params) {\r\n let initSearchData = {};\r\n let paramArr = params.split(\";\");\r\n for (let i in paramArr) {\r\n let queryArr = paramArr[i].split(\"-\");\r\n let key = queryArr[0];\r\n let value = queryArr[1];\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(value) == true) {\r\n let parm = value.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n }\r\n initSearchData[key] = value;\r\n }\r\n this.$set(formItems[j].option, \"initSearchData\", initSearchData);\r\n }\r\n } else if (formItems[j].fieldType === \"flowableuser\") {\r\n let roleNo = formItems[j].option.roleNo;\r\n let value = \"\";\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(roleNo) == true) {\r\n let parm = roleNo.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n } else {\r\n value = roleNo;\r\n }\r\n this.$set(formItems[j].option, \"roleNoVal\", value);\r\n let params = formItems[j].option.params;\r\n if (params) {\r\n let initSearchData = {};\r\n let paramArr = params.split(\";\");\r\n for (let i in paramArr) {\r\n let queryArr = paramArr[i].split(\"-\");\r\n let key = queryArr[0];\r\n let value = queryArr[1];\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(value) == true) {\r\n let parm = value.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n }\r\n initSearchData[key] = value;\r\n }\r\n this.$set(formItems[j].option, \"initSearchData\", initSearchData);\r\n }\r\n } else if (formItems[j].fieldType === \"dialog\") {\r\n let params = formItems[j].option.params;\r\n if (params) {\r\n let initSearchData = {};\r\n let paramArr = params.split(\";\");\r\n for (let i in paramArr) {\r\n let queryArr = paramArr[i].split(\"-\");\r\n let key = queryArr[0];\r\n let value = queryArr[1];\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(value) == true) {\r\n let parm = value.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n }\r\n initSearchData[key] = value;\r\n }\r\n this.$set(formItems[j].option, \"initSearchData\", initSearchData);\r\n }\r\n }\r\n }\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n formId: {\r\n handler(val, oldVal) {\r\n this.initForm();\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n initData() {\r\n this.initForm();\r\n },\r\n },\r\n computed: {\r\n tableCol() {\r\n let tableCol = [];\r\n for (let i = 0; i < this.option.columns; i++) {\r\n let index = i + \"\";\r\n tableCol.push({ index: index });\r\n }\r\n return tableCol;\r\n },\r\n tableData() {\r\n let formItem = this.option.formItem.filter((item) => {\r\n if (item.isShow) {\r\n return true;\r\n } else if (item.state && item.state.length > 0) {\r\n for (let sts of item.state) {\r\n if (sts.isShow !== false) {\r\n return true;\r\n }\r\n }\r\n } else if (item.fieldType == \"empty\" || item.fieldType == \"label\") {\r\n return true;\r\n }\r\n });\r\n let len = formItem.length;\r\n let tableData = new Array();\r\n for (let item of formItem) {\r\n let rowIndex = item.rowIndex;\r\n let colIndex = item.colIndex;\r\n if (!tableData[rowIndex]) {\r\n tableData[rowIndex] = {};\r\n }\r\n if (item.useState) {\r\n let active = item.state.find((i) => {\r\n return item.state === i.id;\r\n });\r\n item = Object.assign(item, active);\r\n }\r\n tableData[rowIndex][colIndex] = item;\r\n }\r\n this.original = JSON.parse(JSON.stringify(tableData));\r\n return tableData;\r\n },\r\n },\r\n methods: {\r\n unique(arr1) {\r\n const res = new Map();\r\n return arr1.filter((a) => !res.has(a.optCode) && res.set(a.optCode, 1));\r\n },\r\n returnCol(\r\n col = {},\r\n { rowIndex, colIndex, rowspan, colspan, rm = true, belong } = {}\r\n ) {\r\n let self = this;\r\n col.fieldType = col.fieldType || \"empty\";\r\n\r\n if (rowspan != void 0) {\r\n col.rowspan = rowspan;\r\n } else if (col.rowspan == void 0) {\r\n col.rowspan = 1;\r\n }\r\n if (colspan != void 0) {\r\n col.colspan = colspan;\r\n } else if (col.colspan == void 0) {\r\n col.colspan = 1;\r\n }\r\n if (rowIndex != void 0) {\r\n col.rowIndex = rowIndex;\r\n }\r\n if (colIndex != void 0) {\r\n col.colIndex = colIndex;\r\n }\r\n if (belong) {\r\n col.belong = belong;\r\n rm = false;\r\n }\r\n rm && delete col.belong;\r\n return col;\r\n },\r\n doBeforeForm(form) {\r\n let len = form.columns;\r\n let items = form.formItem;\r\n let arr = [];\r\n for (let col of items) {\r\n if (col.hasOwnProperty(\"colspan\") && col.hasOwnProperty(\"rowspan\")) {\r\n arr.push(col);\r\n continue;\r\n }\r\n let type = col.fieldType;\r\n if (col.isShow === false) {\r\n col.rowspan = 1;\r\n col.colspan = 1;\r\n arr.push(col);\r\n } else if (type == \"label\") {\r\n col.rowspan = 1;\r\n col.colspan = len;\r\n arr.push(col);\r\n for (let index = 1; index < len; index++) {\r\n arr.push(this.returnCol({}, { colspan: 0, rowspan: 0 }));\r\n }\r\n } else {\r\n col.rowspan = 1;\r\n col.colspan = col.colspan || 1;\r\n arr.push(col);\r\n if (col.colspan && col.colspan > 1) {\r\n for (let index = 1; index < col.colspan; index++) {\r\n arr.push(this.returnCol({}, { colspan: 0, rowspan: 0 }));\r\n }\r\n }\r\n }\r\n }\r\n form.formItem = arr;\r\n return form;\r\n },\r\n rowColMergeHandler({ row, column, rowIndex, columnIndex }) {\r\n let col = row[columnIndex + \"\"];\r\n return col && [col.rowspan, col.colspan];\r\n },\r\n resetForm(callback) {\r\n this.$refs[this.formId].resetFields();\r\n if (formUtil.isFunction(callback)) {\r\n callback();\r\n }\r\n },\r\n clickFunc(item, el) {\r\n let events = item.events;\r\n for (let i in events) {\r\n if (\r\n this.option.formDisabled !== true &&\r\n item.disabled !== true &&\r\n events[i].type === \"click\" &&\r\n formUtil.parentVmExist(this, events[i].callback)\r\n ) {\r\n this.parentVm._self[events[i].callback](el);\r\n }\r\n }\r\n },\r\n validateForm(callback) {\r\n this.$refs[this.formId].validate((valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n validateField(parm, callback) {\r\n this.$refs[this.formId].validateField(parm, (valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n clearValidate() {\r\n this.$nextTick(() => {\r\n if (arguments.length === 0) {\r\n this.$refs[this.formId].clearValidate();\r\n } else if (arguments.length >= 1) {\r\n this.$refs[this.formId].clearValidate(arguments[1]);\r\n }\r\n });\r\n },\r\n getFormItems(formItem) {\r\n let formItems = [];\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n formItems.push(groupItem[j]);\r\n }\r\n } else {\r\n formItems.push(formItem[i]);\r\n }\r\n }\r\n return formItems;\r\n },\r\n dateFormatType(formField, value, type) {\r\n try {\r\n if (this.isEmpty(value)) {\r\n return value;\r\n }\r\n let valueFormat = \"\";\r\n let format = \"\";\r\n if (type === \"date\" || type === \"dateGroup\") {\r\n valueFormat = \"yyyyMMdd\";\r\n format = \"yyyy-MM-dd\";\r\n } else if (type === \"datetime\" || type === \"datetimeGroup\") {\r\n valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n format = \"yyyy-MM-dd HH:mm:ss\";\r\n } else {\r\n return value;\r\n }\r\n if (!this.isEmpty(formField.dateFormat)) {\r\n if (!this.isEmpty(formField.dateFormat.valueFormat)) {\r\n valueFormat = formField.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(formField.dateFormat.format)) {\r\n format = formField.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n return value;\r\n } catch (error) {\r\n console.error(formField.fieldName + \"日期数据解析错误\");\r\n return value;\r\n }\r\n },\r\n async setFormValue(key, value) {\r\n if (key instanceof Object) {\r\n for (let i in key) {\r\n this.setFormValue(i, key[i]);\r\n }\r\n } else {\r\n let formItem = this.option.formItem;\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let formField = formItems[i];\r\n if (\r\n formField !== null &&\r\n (key === formField.fieldName ||\r\n key === formField.endFieldName ||\r\n key === formField.fieldDesc)\r\n ) {\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n let checkValue = [];\r\n if (!this.isEmpty(value)) {\r\n let checkArray = value.split(\"|\");\r\n for (let k in checkArray) {\r\n if (!this.isEmpty(checkArray[k])) {\r\n checkValue.push(checkArray[k]);\r\n }\r\n }\r\n }\r\n value = checkValue;\r\n } else if (formField.fieldType === \"cascader\") {\r\n if (this.option.query === \"query\") {\r\n let _this = formField;\r\n if (formField.library.url) {\r\n //从库中选择\r\n value = await this.getCascaderData(value, formField);\r\n } else {\r\n value = this.getCascaderDefaultData(value, formField);\r\n }\r\n } else {\r\n let checkValue = [];\r\n if (formField.multiple) {\r\n //多选\r\n let checkArray = value.split(\"|\");\r\n for (let k in checkArray) {\r\n if (!this.isEmpty(checkArray[k])) {\r\n checkValue.push(checkArray[k]);\r\n }\r\n }\r\n } else {\r\n //单选\r\n let checkArray = value.split(\"\\,\");\r\n for (let k in checkArray) {\r\n if (!this.isEmpty(checkArray[k])) {\r\n checkValue.push(checkArray[k]);\r\n }\r\n }\r\n }\r\n value = checkValue;\r\n }\r\n } else if (formField.fieldType === \"text\") {\r\n if (formField.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(value);\r\n } else if (formField.dataType === \"money(wan)\") {\r\n value = formUtil.numDiv(value, 10000);\r\n } else if (formField.dataType === \"money(baiwan)\") {\r\n value = formUtil.numDiv(value, 1000000);\r\n } else if (formField.dataType === \"money(yi)\") {\r\n value = formUtil.numDiv(value, 100000000);\r\n } else if (formField.dataType === \"percentile\") {\r\n value = formUtil.numMulti(value, 100);\r\n } else if (formField.dataType === \"thousand\") {\r\n value = formUtil.numMulti(value, 1000);\r\n } else if (formField.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(value, 10000);\r\n }\r\n }\r\n if (this.option.query === \"query\") {\r\n let parmArray = this.pramDicItem[formField.fieldName];\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n if (formField.optionType === \"1\" && value) {\r\n let checkBoxValue = \"\";\r\n const selectItem = this.unique(formField.dicItem);\r\n for (let h in value) {\r\n if (!this.isEmpty(value[h])) {\r\n for (let dic of selectItem) {\r\n if (dic.optCode == value[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = dic.optName;\r\n } else {\r\n checkBoxValue = dic.optName + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (formField.optionType == \"2\" && value) {\r\n let checkBoxValue = \"\";\r\n for (let h in value) {\r\n if (!this.isEmpty(value[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (formField.optionType === \"3\" && value) {\r\n let checkBoxValue = \"\";\r\n const reponse = await sync.getParameter(\r\n formField.library.url,\r\n formField.library.searchData,\r\n true\r\n );\r\n let options = [];\r\n if (reponse.code === 0) {\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (\r\n formField.library.realField !== undefined &&\r\n formField.library.realField !== null &&\r\n formField.library.realField !== \"\"\r\n ) {\r\n realField = formField.library.realField;\r\n }\r\n if (\r\n formField.library.showField !== undefined &&\r\n formField.library.showField !== null &&\r\n formField.library.showField !== \"\"\r\n ) {\r\n showField = formField.library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n value: list[i][realField] + \"\",\r\n label: list[i][showField],\r\n };\r\n options.push(option);\r\n }\r\n } else {\r\n console.error(reponse.msg);\r\n }\r\n for (let h in value) {\r\n if (!this.isEmpty(value[h])) {\r\n for (let i in options) {\r\n if (options[i].value === value[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = options[i].label;\r\n } else {\r\n checkBoxValue = options[i].label + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n }\r\n } else if (formField.fieldType === \"switch\") {\r\n if (formField.switchValue.activeValue === value) {\r\n value = \"是\";\r\n } else {\r\n value = \"否\";\r\n }\r\n } else if (\r\n formField.fieldType === \"date\" ||\r\n formField.fieldType === \"datetime\" ||\r\n formField.fieldType === \"dateGroup\" ||\r\n formField.fieldType === \"datetimeGroup\" ||\r\n formField.fieldType === \"timeGroup\"\r\n ) {\r\n value = this.dateFormatType(formField, value, formField.fieldType);\r\n } else if (formField.fieldType === \"select\") {\r\n if (formField.optionType === \"1\" && value) {\r\n const selectItem = this.unique(formField.dicItem);\r\n for (let dic of selectItem) {\r\n if (dic.optCode == value) {\r\n value = dic.optName;\r\n break;\r\n }\r\n }\r\n } else if (formField.optionType == \"2\" && value) {\r\n let checkBoxValue = \"\";\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n } else if (formField.optionType === \"3\" && value) {\r\n let checkBoxValue = \"\";\r\n const reponse = await sync.getParameter(\r\n formField.library.url,\r\n formField.library.searchData,\r\n true\r\n );\r\n let options = [];\r\n if (reponse.code === 0) {\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (\r\n formField.library.realField !== undefined &&\r\n formField.library.realField !== null &&\r\n formField.library.realField !== \"\"\r\n ) {\r\n realField = formField.library.realField;\r\n }\r\n if (\r\n formField.library.showField !== undefined &&\r\n formField.library.showField !== null &&\r\n formField.library.showField !== \"\"\r\n ) {\r\n showField = formField.library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n value: list[i][realField],\r\n label: list[i][showField],\r\n };\r\n options.push(option);\r\n }\r\n } else {\r\n console.error(reponse.msg);\r\n }\r\n for (let i in options) {\r\n if (options[i].value === value) {\r\n value = options[i].label;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n }\r\n if (\r\n (this.option.query === \"query\" || this.option.formDisabled === true) &&\r\n !this.isEmpty(formField.formatter) &&\r\n formUtil.parentVmExist(this, formField.formatter)\r\n ) {\r\n value = this.parentVm._self[formField.formatter](value);\r\n }\r\n this.$set(this.formData, key, value);\r\n }\r\n }\r\n }\r\n },\r\n getFormValue() {\r\n let formItem = this.option.formItem;\r\n let data = JSON.parse(JSON.stringify(this.formData)); //深度copy\r\n if (arguments.length === 0) {\r\n for (let j in data) {\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let formField = formItems[i];\r\n if (\r\n formField !== null &&\r\n (j === formField.fieldName || j === formField.endFieldName)\r\n ) {\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n if (this.option.query != \"query\") {\r\n data[j] = (data[j] || []).join(\"|\");\r\n }\r\n } else if (formField.fieldType === \"text\") {\r\n let formTextValue = data[j];\r\n if (formField.dataType === \"money(yuan)\") {\r\n formTextValue = formUtil.delcommafy(formTextValue);\r\n } else if (formField.dataType === \"money(wan)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 10000);\r\n } else if (formField.dataType === \"money(baiwan)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 1000000);\r\n } else if (formField.dataType === \"money(yi)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 100000000);\r\n } else if (formField.dataType === \"percentile\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 100);\r\n } else if (formField.dataType === \"thousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 1000);\r\n } else if (formField.dataType === \"tenThousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 10000);\r\n }\r\n data[j] = formTextValue;\r\n } else if (formField.fieldType === \"cascader\") {\r\n if (this.option.query != \"query\") {\r\n if (formField.multiple) {\r\n //多选\r\n data[j] = data[formField.fieldName].join(\"|\");\r\n } else {\r\n //单选\r\n data[j] = data[formField.fieldName].join(\",\");\r\n }\r\n }\r\n } else if (formField.isDialog === true && formField.fieldDesc != \"\") {\r\n data[formField.fieldDesc] = formField.fieldDescValue;\r\n }\r\n }\r\n }\r\n }\r\n return data;\r\n } else if (arguments.length >= 1) {\r\n let result = this.getFormValue();\r\n if (!this.isEmpty(result)) {\r\n result = result[arguments[0]];\r\n }\r\n return result;\r\n }\r\n },\r\n async getCascaderData(value, formField) {\r\n const reponse = await sync.getParameter(\r\n formField.library.url,\r\n formField.library.searchDataStr,\r\n true\r\n );\r\n if (reponse.code === 0) {\r\n if (formField.multiple) {\r\n //多选\r\n let checkAllArray = value.split(\"|\");\r\n var res = \"\";\r\n for (let k in checkAllArray) {\r\n let checkArray = checkAllArray[k].split(\"\\,\");\r\n if (k > 0) {\r\n res += \"|\";\r\n }\r\n //是否显示全部\r\n if (formField.showAll) {\r\n var separator = \"/\";\r\n if (formField.separator != null) {\r\n separator = formField.separator;\r\n }\r\n res += this.getCascaderAllValueForDB(\r\n checkArray,\r\n reponse.list,\r\n formField,\r\n separator\r\n );\r\n } else {\r\n res += this.getCascaderValueForDB(checkArray, reponse.list, formField);\r\n }\r\n }\r\n return res;\r\n } else {\r\n //单选\r\n let checkArray = value.split(\"\\,\");\r\n //是否显示全部\r\n if (formField.showAll) {\r\n var separator = \"/\";\r\n if (formField.separator != null) {\r\n separator = formField.separator;\r\n }\r\n return this.getCascaderAllValueForDB(\r\n checkArray,\r\n reponse.list,\r\n formField,\r\n separator\r\n );\r\n } else {\r\n return this.getCascaderValueForDB(checkArray, reponse.list, formField);\r\n }\r\n }\r\n }\r\n },\r\n getCascaderDefaultData(value, formField) {\r\n if (formField.multiple) {\r\n //多选\r\n let checkAllArray = value.split(\"|\");\r\n var res = \"\";\r\n for (let k in checkAllArray) {\r\n let checkArray = checkAllArray[k].split(\"\\,\");\r\n if (k > 0) {\r\n res += \"|\";\r\n }\r\n //是否显示全部\r\n if (formField.showAll) {\r\n var separator = \"/\";\r\n if (formField.separator != null) {\r\n separator = formField.separator;\r\n }\r\n res += this.getCascaderAllValueByKey(\r\n formField.dicItem,\r\n checkArray[checkArray.length - 1],\r\n separator\r\n );\r\n } else {\r\n res += this.getCascaderValueByKey(\r\n formField.dicItem,\r\n checkArray[checkArray.length - 1]\r\n );\r\n }\r\n }\r\n return res;\r\n } else {\r\n //单选\r\n let checkArray = value.split(\"\\,\");\r\n //是否显示全部\r\n if (formField.showAll) {\r\n var separator = \"/\";\r\n if (formField.separator != null) {\r\n separator = formField.separator;\r\n }\r\n return this.getCascaderAllValueByKey(\r\n formField.dicItem,\r\n checkArray[checkArray.length - 1],\r\n separator\r\n );\r\n } else {\r\n return this.getCascaderValueByKey(\r\n formField.dicItem,\r\n checkArray[checkArray.length - 1]\r\n );\r\n }\r\n }\r\n },\r\n getCascaderValueForDB(checkArray, list, formField) {\r\n for (var i = 0; i < list.length; i++) {\r\n if (list[i][formField.library.realField] == checkArray[checkArray.length - 1]) {\r\n return list[i][formField.library.showField];\r\n }\r\n }\r\n },\r\n getCascaderAllValueForDB(checkArray, list, formField, separator) {\r\n var value = \"\";\r\n for (var j = 0; j < checkArray.length; j++) {\r\n for (var i = 0; i < list.length; i++) {\r\n if (list[i][formField.library.realField] == checkArray[j]) {\r\n if (value != \"\") {\r\n value = value + separator + list[i][formField.library.showField];\r\n } else {\r\n value = list[i][formField.library.showField];\r\n }\r\n }\r\n }\r\n }\r\n return value;\r\n },\r\n getCascaderValueByKey(data, field) {\r\n var value = \"\";\r\n for (let key in data) {\r\n if (data[key].optCode === field) {\r\n return data[key].optName;\r\n } else {\r\n if (data[key].children != null && data[key].children.length != 0) {\r\n value = this.getCascaderValueByKey(data[key].children, field);\r\n if (value != \"\" && value != null) {\r\n return value;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n getCascaderAllValueByKey(data, field, separator) {\r\n var value = \"\";\r\n for (let key in data) {\r\n if (data[key].optCode === field) {\r\n return data[key].optName;\r\n } else {\r\n if (data[key].children != null && data[key].children.length != 0) {\r\n value = this.getCascaderAllValueByKey(data[key].children, field, separator);\r\n if (value != \"\" && value != null) {\r\n return data[key].optName + separator + value;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n attr() {\r\n let formItem = this.option.formItem;\r\n if (arguments.length === 2) {\r\n let formField = null;\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n if (arguments[0] === groupItem[j].fieldName) {\r\n formField = groupItem[j];\r\n }\r\n }\r\n } else {\r\n if (arguments[0] === formItem[i].fieldName) {\r\n formField = formItem[i];\r\n }\r\n }\r\n }\r\n let value = \"\";\r\n if (formField !== null) {\r\n if (arguments[1] === \"dicItem\") {\r\n value = this.pramDicItem[arguments[0]];\r\n } else if (arguments[1] === \"events\") {\r\n value = this.events[arguments[0]];\r\n } else if (arguments[1] === \"rules\") {\r\n value = this.rules[arguments[0]];\r\n } else {\r\n value = formField[arguments[1]];\r\n }\r\n }\r\n return value;\r\n } else if (arguments.length >= 3) {\r\n let formField = null;\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n if (arguments[0] === groupItem[j].fieldName) {\r\n formField = groupItem[j];\r\n formField[\"formItem\"] = formItem[i];\r\n }\r\n }\r\n } else {\r\n if (arguments[0] === formItem[i].fieldName) {\r\n formField = formItem[i];\r\n }\r\n }\r\n }\r\n if (formField !== null) {\r\n let label = formField.label;\r\n if (arguments[1] === \"dicItem\") {\r\n this.$set(this.pramDicItem, arguments[0], arguments[2]);\r\n } else if (arguments[1] === \"events\") {\r\n //解析事件\r\n try {\r\n let eventsArray = arguments[2];\r\n let event = {};\r\n for (let evetIndex in eventsArray) {\r\n if (\r\n !this.isEmpty(eventsArray[evetIndex].type) &&\r\n eventsArray[evetIndex].type !== \"click\" &&\r\n formUtil.parentVmExist(this, eventsArray[evetIndex].callback)\r\n ) {\r\n event[eventsArray[evetIndex].type] = this.parentVm._self[\r\n eventsArray[evetIndex].callback\r\n ];\r\n }\r\n }\r\n this.$set(this.events, formField.fieldName, event);\r\n } catch (error) {\r\n console.error(\"事件解析错误:\" + error);\r\n this.$set(this.events, formField.fieldName, {});\r\n }\r\n } else if (arguments[1] === \"rules\") {\r\n //解析规则\r\n try {\r\n //解析规则\r\n let formRules = arguments[2];\r\n let fieldNameRules = [];\r\n if (formField.fieldType === \"text\") {\r\n let type = formField.dataType;\r\n if (type === \"int\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateInt;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"long\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateLong;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (\r\n type == \"double(2)\" ||\r\n type == \"double(4)\" ||\r\n type == \"double(6)\" ||\r\n type == \"money(fen)\" ||\r\n type == \"money(jiao)\" ||\r\n type == \"money(wan)\" ||\r\n type == \"money(baiwan)\" ||\r\n type == \"money(yi)\" ||\r\n type == \"percentile\" ||\r\n type === \"thousand\" ||\r\n type == \"tenThousand\"\r\n ) {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateNumber;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"float\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateFloat;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"boolean\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateBoolean;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type === \"money(yuan)\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateMoney;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n }\r\n\r\n for (let k in formRules) {\r\n let fieldNameRule = {};\r\n let trigger = \"blur\";\r\n let message = \"\";\r\n let type = \"\";\r\n if (formRules[k].type === \"required\") {\r\n if (!this.isEmpty(formField[\"formItem\"])) {\r\n formField[\"formItem\"].required = true;\r\n }\r\n fieldNameRule[\"required\"] = true;\r\n trigger = \"blur\";\r\n message = label + \"不能为空\";\r\n } else if (formRules[k].type === \"validator\") {\r\n if (formUtil.parentVmExist(this, formRules[k].validator)) {\r\n fieldNameRule[\"validator\"] = this.parentVm._self[\r\n formRules[k].validator\r\n ];\r\n }\r\n trigger = \"blur\";\r\n } else if (formRules[k].type === \"number\") {\r\n trigger = \"blur\";\r\n var ruleExpr = formRules[k].ruleExpr;\r\n fieldNameRule[\"validator\"] = (rule, value, callback) => {\r\n console.log(ruleExpr);\r\n let formData = this.getFormValue();\r\n let expr = ruleExpr.replace(new RegExp(\"\\\\$\\\\{this\\\\}\", \"gm\"), value);\r\n for (let fieldName in formData) {\r\n if (expr.indexOf(fieldName) == -1) {\r\n continue;\r\n }\r\n let fieldValue = formData[fieldName];\r\n if (fieldValue == \"\" || isNaN(fieldValue)) {\r\n fieldValue = 0;\r\n }\r\n expr = expr.replace(\r\n new RegExp(\"\\\\$\\\\{\" + fieldName + \"\\\\}\", \"gm\"),\r\n fieldValue\r\n );\r\n }\r\n console.log(expr);\r\n let validFlag = eval(expr);\r\n if (validFlag) {\r\n callback();\r\n } else {\r\n callback(new Error(rule.message));\r\n }\r\n };\r\n } else if (formRules[k].type === \"date\") {\r\n trigger = \"blur\";\r\n // fieldNameRule[\"validator\"] = formUtil.validateDate;\r\n var ruleDateExpr = formRules[k].ruleExpr;\r\n var resDate = (fieldName, value) => {\r\n let formItem = this.option.formItem;\r\n for (let i in formItem) {\r\n let item = formItem[i];\r\n if (\r\n item.fieldName == fieldName &&\r\n (item.fieldType == \"date\" ||\r\n item.fieldType == \"time\" ||\r\n item.fieldType == \"datetime\")\r\n ) {\r\n let format = item.dateFormat.format;\r\n let valueFormat = item.dateFormat.valueFormat;\r\n let date = formUtil.formatDate(value, valueFormat);\r\n if (date instanceof Date && !isNaN(date.getTime())) {\r\n return date.getTime();\r\n } else {\r\n return value;\r\n }\r\n }\r\n }\r\n };\r\n fieldNameRule[\"validator\"] = (rule, value, callback) => {\r\n console.log(ruleDateExpr);\r\n let formData = this.getFormValue();\r\n value = resDate(arguments[0], value);\r\n let expr = ruleDateExpr.replace(\r\n new RegExp(\"\\\\$\\\\{this\\\\}\", \"gm\"),\r\n value\r\n );\r\n for (let fieldName in formData) {\r\n if (expr.indexOf(fieldName) == -1) {\r\n continue;\r\n }\r\n\r\n let fieldValue = formData[fieldName];\r\n fieldValue = resDate(fieldName, fieldValue);\r\n expr = expr.replace(\r\n new RegExp(\"\\\\$\\\\{\" + fieldName + \"\\\\}\", \"gm\"),\r\n fieldValue\r\n );\r\n }\r\n try {\r\n console.log(expr);\r\n let validFlag = eval(expr);\r\n if (validFlag) {\r\n callback();\r\n } else {\r\n callback(new Error(rule.message));\r\n }\r\n } catch (error) {}\r\n };\r\n } else if (formRules[k].type === \"email\") {\r\n trigger = \"blur\";\r\n message = label + \"格式不正确\";\r\n type = \"email\";\r\n } else if (formRules[k].type === \"phone\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的手机号码\";\r\n fieldNameRule[\"pattern\"] = /^1[123456789]\\d{9}$/;\r\n } else if (formRules[k].type === \"mobile\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的电话\";\r\n fieldNameRule[\"pattern\"] = /^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$/;\r\n } else if (formRules[k].type === \"idNo\") {\r\n trigger = \"blur\";\r\n fieldNameRule[\"validator\"] = formUtil.validateIdNo;\r\n } else {\r\n //continue\r\n }\r\n\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n type = \"array\";\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].min) && !this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message =\r\n label +\r\n \"长度必须大于等于\" +\r\n formRules[k].min +\r\n \"并且小于等于\" +\r\n formRules[k].max;\r\n } else if (!this.isEmpty(formRules[k].min)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n message = label + \"长度必须大于等于\" + formRules[k].min;\r\n } else if (!this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message = label + \"长度必须小于等于\" + formRules[k].max;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].message)) {\r\n message = formRules[k].message;\r\n }\r\n fieldNameRule[\"message\"] = message;\r\n\r\n if (!this.isEmpty(type)) {\r\n fieldNameRule[\"type\"] = type;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].trigger)) {\r\n trigger = formRules[k].trigger;\r\n }\r\n fieldNameRule[\"trigger\"] = trigger;\r\n\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n this.$set(this.rules, formField.fieldName, fieldNameRules);\r\n } catch (error) {\r\n console.error(\"规则解析错误:\" + error);\r\n this.$set(this.rules, formField.fieldName, []);\r\n }\r\n } else {\r\n formField[arguments[1]] = arguments[2];\r\n }\r\n }\r\n }\r\n },\r\n async initForm(callback) {\r\n let _this = this;\r\n _this.option = {};\r\n _this.formData = {};\r\n _this.events = {};\r\n _this.pramDicItem = {};\r\n _this.rules = {};\r\n _this.state = {};\r\n if (_this.formId) {\r\n try {\r\n let jsonData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/form/\" + _this.formId + \".json\"\r\n );\r\n if (jsonData) {\r\n _this.option = JSON.parse(JSON.stringify(_this.doBeforeForm(jsonData.data)));\r\n } else {\r\n _this.option = JSON.parse(\r\n JSON.stringify(_this.doBeforeForm(_this.$busDatas[_this.formId]))\r\n );\r\n }\r\n } catch (error) {\r\n if (_this.initData === undefined) {\r\n _this.$message.error(\r\n \"未找到 [ \" + _this.formId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n }\r\n }\r\n if (_this.initData !== undefined) {\r\n _this.initData = this.doBeforeForm(_this.initData);\r\n _this.option = Object.assign(_this.option, _this.initData);\r\n }\r\n\r\n //处理隐藏域\r\n this.hiddenItem = this.option.formItem.filter((item) => {\r\n if (item.state && item.state.length > 0) {\r\n for (let sts of item.state) {\r\n if (sts.isShow !== false) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if (item.isShow === false) {\r\n return true;\r\n }\r\n });\r\n\r\n _this.temp2 = new Object(); // 用于过滤排序的对象\r\n\r\n let formItem = _this.option.formItem;\r\n let dicKeyArray = [];\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let item = formItems[i];\r\n if (item.fieldType === \"label\" || item.fieldType === \"empty\") {\r\n continue;\r\n }\r\n //处理状态\r\n let state = item.state;\r\n let use = item.useState;\r\n if (state && use) {\r\n for (let sts of state) {\r\n if (sts.id == use) {\r\n //将激活的状态和基础数据合并\r\n item = Object.assign(item, sts);\r\n }\r\n //处理condition\r\n let condition = sts.condition;\r\n //处理条件,拿到具体的字段名称数组\r\n let key = Array.from(formUtil.doExpression(condition));\r\n //遍历字段名称,用于进行监听\r\n for (let name of key) {\r\n //都添加这个全局属性下\r\n if (_this.state[name]) {\r\n _this.state[name].push(Object.assign({}, item, sts));\r\n } else {\r\n _this.state[name] = [Object.assign({}, item, sts)];\r\n }\r\n }\r\n if (!item.isShow) {\r\n _this.temp2[`${item.rowIndex}-${item.colIndex}`] = item;\r\n }\r\n }\r\n }\r\n\r\n if (\r\n Array.isArray(item.value) &&\r\n (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\")\r\n ) {\r\n item.value = item.value.join(\"|\");\r\n }\r\n if (Array.isArray(item.value) && item.fieldType === \"cascader\") {\r\n if (item.multiple) {\r\n //多选\r\n item.value = item.value.join(\"|\");\r\n } else {\r\n //单选\r\n item.value = item.value.join(\",\");\r\n }\r\n }\r\n //解析字典项\r\n // let setFormValueFlag = true;\r\n let dicKey = item.dicKey;\r\n if (!_this.isEmpty(dicKey) && item.optionType !== \"1\") {\r\n // setFormValueFlag = true;\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = item.fieldName;\r\n dicKeyObject.value = item.value;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n _this.$set(_this.pramDicItem, item.fieldName, item.dicItem);\r\n }\r\n if (\r\n item.fieldType === \"dateGroup\" ||\r\n item.fieldType === \"datetimeGroup\" ||\r\n item.fieldType === \"timeGroup\"\r\n ) {\r\n let value = [\"\", \"\"];\r\n if (Array.isArray(item.value)) {\r\n for (let d = 0; d < item.value.length; d++) {\r\n value[d] = item.value[d];\r\n }\r\n }\r\n _this.setFormValue(item.fieldName, value[0]);\r\n _this.setFormValue(item.endFieldName, value[1]);\r\n } else {\r\n // if (setFormValueFlag) {\r\n _this.setFormValue(item.fieldName, item.value);\r\n // }\r\n }\r\n\r\n //解析事件\r\n _this.attr(item.fieldName, \"events\", item.events);\r\n\r\n //解析规则\r\n _this.attr(item.fieldName, \"rules\", item.rules);\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n // _this.setFormValue(dicKeyArray[k].fieldName, dicKeyArray[k].value, true);\r\n }\r\n _this.formFlag = true;\r\n });\r\n\r\n //watch 状态的监听\r\n let keys = Object.keys(_this.state); //获取所有的key\r\n\r\n for (let key of keys) {\r\n //取到每一条,用vue进行动态监听\r\n let item = _this.state[key];\r\n _this.$watch(`formData.${key}`, function (val, oldVal) {\r\n _this.$nextTick(() => {\r\n this.getMatch(item, val);\r\n });\r\n });\r\n }\r\n _this.clearValidate();\r\n _this.calcTable(); //初始化计算表格\r\n\r\n _this.$nextTick(() => {\r\n _this.$emit(\"initCallBack\", this.$refs[this.formId]);\r\n if (typeof callback === \"function\") {\r\n callback(this.$refs[this.formId]);\r\n }\r\n });\r\n },\r\n //进行匹配\r\n getMatch(arr, val) {\r\n let flag = false;\r\n //遍历进行多条件的匹配\r\n for (let item of arr) {\r\n let condition = item.condition;\r\n //获取条件的key\r\n let keys = formUtil.doExpression(condition);\r\n //转换条件\r\n for (let name of keys.values()) {\r\n //数字\r\n if (!isNaN(name)) {\r\n condition = condition.replaceAll(\"${\" + name + \"}\", this.formData[name]);\r\n }\r\n //boolean\r\n else if (\r\n name === true ||\r\n name === false ||\r\n name === \"true\" ||\r\n name === \"false\"\r\n ) {\r\n condition = condition.replaceAll(\"${\" + name + \"}\", this.formData[name]);\r\n }\r\n //string\r\n else {\r\n condition = condition.replaceAll(\r\n \"${\" + name + \"}\",\r\n `'${this.formData[name]}'`\r\n );\r\n }\r\n }\r\n // console.log('状态匹配 \\n初始条件 - %s \\n处理后条件 - %s', item.condition, condition);\r\n //判断条件触发不\r\n if (eval(condition)) {\r\n let uuid = item.uuid;\r\n //根据uuid找到组件\r\n let a = this.option.formItem;\r\n let one = this.option.formItem.find((i) => {\r\n if (i.uuid == uuid) {\r\n return true;\r\n } else {\r\n if (i.state) {\r\n for (let sts of i.state) {\r\n if (sts.uuid === uuid) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n });\r\n //存在进行处理\r\n if (one) {\r\n let b = item;\r\n //取到旧的数据\r\n let _old = Object.assign({}, this.tableData[one.rowIndex][one.colIndex]);\r\n //触发formdata变化, 进行表单的赋值\r\n this.$set(\r\n this.formData,\r\n item.fieldName,\r\n this.formData[item.fieldName] || item.value\r\n );\r\n //进行组件的替换\r\n this.tableData[one.rowIndex][one.colIndex] = item;\r\n if (!this.temp2) {\r\n this.temp2 = new Object();\r\n }\r\n //把这个变化组件 标记进行 temp2 , 初始化这个也用\r\n this.temp2[`${one.rowIndex}-${one.colIndex}`] = item;\r\n //判断涉及到组件显隐不 ,有就触发计算表格\r\n if (item.isShow === false || item.rowIndex !== _old.rowIndex) {\r\n flag = true;\r\n }\r\n } else {\r\n console.warn(`匹配状态 - fieldName: ${name} - 未找到`);\r\n }\r\n // console.log(\"tableData\", this.tableData);\r\n }\r\n }\r\n //计算表格\r\n flag && this.calcTable();\r\n },\r\n //计算表格\r\n calcTable() {\r\n //先确保上面的变化结束\r\n this.$nextTick(() => {\r\n let td = this.tableData;\r\n let len = td.length;\r\n let columns = this.option.columns;\r\n //重置上次变化\r\n if (this.temp) {\r\n let keys = Object.keys(this.temp);\r\n for (let key of keys) {\r\n let ri = key.split(\"-\")[0];\r\n let ci = key.split(\"-\")[1];\r\n td[ri][ci] = this.temp[key];\r\n }\r\n }\r\n this.temp = new Object(); //记录上一次的变化的\r\n //确保重置变化结束\r\n this.$nextTick(() => {\r\n //对每一列从底部向上进行递归计算,判断需要上移不\r\n for (let index = 0; index < columns; index++) {\r\n let col = td[len - 1][index];\r\n this.deep(col, len - 1, index, len - 1);\r\n }\r\n });\r\n // console.log(`temp `, this.temp);\r\n });\r\n },\r\n //递归计算每一个单元格\r\n deep(col, rowIndex, colIndex, len) {\r\n let td = this.tableData;\r\n //如果涉及到跨列的 ,就修改计算的触发点,将最后一行的定位计算到跨列这里\r\n if (col && (col.belong || col.colspan > 1)) {\r\n rowIndex >= 1 &&\r\n this.deep(td[rowIndex - 1][colIndex], rowIndex - 1, colIndex, rowIndex);\r\n return;\r\n }\r\n //如果当前格是隐藏的,就进行移动操作\r\n if (col && col.isShow === false) {\r\n //确保上一轮变化触发成功\r\n this.$nextTick(() => {\r\n //移单元格向上\r\n this.modCol(col, rowIndex, colIndex, len);\r\n });\r\n }\r\n rowIndex >= 1 && this.deep(td[rowIndex - 1][colIndex], rowIndex - 1, colIndex, len);\r\n },\r\n modCol(col, rowIndex, colIndex, len) {\r\n let td = this.tableData;\r\n //遍历当前向下的所有单元格往上一次\r\n for (let index = rowIndex; index <= len; index++) {\r\n //记录单元格变化\r\n this.recordCol(td[index][colIndex], index, colIndex);\r\n //最后一行置空\r\n if (index == len) {\r\n td[index][colIndex] = this.returnCol(\r\n {},\r\n { rowIndex: index, colIndex: colIndex }\r\n );\r\n continue;\r\n }\r\n //变化\r\n td[index][colIndex] = td[index + 1][colIndex];\r\n }\r\n },\r\n //记录变化的单元格,用于下次变化前的重置操作\r\n recordCol(col, rowIndex, colIndex) {\r\n let key = `${rowIndex}-${colIndex}`;\r\n if (this.temp2 && !this.temp2[key]) {\r\n this.temp[key] = this.temp[key] || Object.assign({}, col);\r\n }\r\n },\r\n rowStyleHandler(row) {\r\n let rowData = row.row;\r\n for (let cell in rowData) {\r\n let cellData = rowData[cell];\r\n if (cellData.fieldType != \"empty\") {\r\n return null;\r\n }\r\n }\r\n return { display: \"none\" };\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-form {\r\n width: 100%;\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n.mftcc-form .el-form-item__content,\r\n.mftcc-form-search .el-form-item__content {\r\n width: auto;\r\n}\r\n.mftcc-form .el-form-item,\r\n.mftcc-form-search .el-form-item {\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item,\r\n.mftcc-form-search .mftcc-form-group .el-form-item {\r\n padding: 0;\r\n}\r\n.mftcc-form .el-select,\r\n.mftcc-form-search .el-select {\r\n width: 100%;\r\n}\r\n.mftcc-form .form-el-row,\r\n.mftcc-form-search .form-el-row {\r\n width: 100%;\r\n}\r\n.mftcc-form .el-table td,\r\n.mftcc-form-search .el-table td,\r\n.mftcc-form-query .el-table td {\r\n border-bottom: none;\r\n padding: 0;\r\n height: 0;\r\n}\r\n\r\n.mftcc-form .el-table--border::after,\r\n.mftcc-form .el-table::before,\r\n.mftcc-form-search .el-table--border::after,\r\n.mftcc-form-search .el-table::before,\r\n.mftcc-form-query .el-table--border::after,\r\n.mftcc-form-query .el-table::before,\r\n.mftcc-form-expand .el-table--border::after,\r\n.mftcc-form-expand .el-table::before {\r\n content: none;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-form,\r\n.mftcc-form-search {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -ms-flex-wrap: wrap;\r\n flex-wrap: wrap;\r\n}\r\n.mftcc-form .el-form-item__content,\r\n.mftcc-form-search .el-form-item__content {\r\n width: auto;\r\n}\r\n.mftcc-form .el-form-item,\r\n.mftcc-form-search .el-form-item {\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item,\r\n.mftcc-form-search .mftcc-form-group .el-form-item {\r\n padding: 0;\r\n}\r\n.mftcc-form .el-select,\r\n.mftcc-form-search .el-select {\r\n width: 100%;\r\n}\r\n.mftcc-form .form-el-row,\r\n.mftcc-form-search .form-el-row {\r\n width: 100%;\r\n}\r\n","<template>\r\n <el-collapse v-model=\"activeNames\"\r\n class=\"mftcc-collapse\"\r\n @change=\"change\"\r\n >\r\n <el-collapse-item name=\"mftcc-collapse\"\r\n :class=\"{'isAutoHeight':props.isAutoHeight===true}\"\r\n :style=\"'height:'+props.height+'px;max-height:'+props.maxHeight+'px;'\">\r\n <div slot=\"title\" class=\"mftcc-collapse-title\">\r\n <i class=\"el-icon-star-on\"></i>\r\n <span>{{ props.title }}</span>\r\n <li style=\"cursor: pointer\" class=\"el-icon-edit-outline title\" @click.stop=\"editFormM\"></li>\r\n <!-- <i :class=\"corpBaseInfo\"></i> -->\r\n <i :class=\"arrowIcon\"></i>\r\n </div>\r\n <div class=\"mftcc-collapse-info\">\r\n <el-row v-if=\"props.preview===true||isPreview===true\" >\r\n <template v-if=\"props.importType=='form'\">\r\n <mftcc-form :formId=\"props.formId\" :parentVm=\"parentVm\" ref=\"form\" @initCallBack=\"initFormCallBack\"></mftcc-form>\r\n </template>\r\n <template v-else-if=\"props.importType=='table'\">\r\n <mftcc-table :tableId=\"props.tableId\" :parentVm=\"parentVm\" ref=\"table\" @initCallBack=\"initTableCallBack\"></mftcc-table>\r\n </template>\r\n <template v-else-if=\"props.importType=='bizComp'\">\r\n <container :props=\"props\"\r\n :paramData=\"paramData\">\r\n </container>\r\n </template>\r\n </el-row>\r\n </div>\r\n </el-collapse-item>\r\n </el-collapse>\r\n</template>\r\n<script>\r\n\r\nimport formUtil from '../../utils/formUtil'\r\nimport container from \"../layout/plugins/container\";\r\nexport default {\r\n data() {\r\n return {\r\n activeNames:[],\r\n arrowIcon:\"el-icon-arrow-down\"\r\n }\r\n },\r\n props: {\r\n props: {\r\n type: Object,\r\n default() {\r\n return {};\r\n }\r\n },\r\n parentVm:{\r\n type: Object,\r\n required: true\r\n },\r\n isPreview:Boolean,\r\n paramData:{\r\n type: Object,\r\n default: function() {\r\n return {};\r\n }\r\n }\r\n },\r\n components:{\r\n container\r\n },\r\n created() {\r\n if(this.props.isOpen===true){\r\n this.activeNames = [\"mftcc-collapse\"];\r\n }else{\r\n this.activeNames = [];\r\n }\r\n this.change(this.activeNames);\r\n this.initTableSearchData();\r\n },\r\n methods: {\r\n initTableSearchData(){\r\n this.initSearchData = {};\r\n let isd = this.props.initSearchData;\r\n for(let sd of isd){\r\n let value;\r\n if(sd.value.startsWith(\"${\")&&sd.value.endsWith(\"}\")){\r\n value = sd.value.substring(2,sd.value.length-1);\r\n if(this.paramData[value]){\r\n value = this.paramData[value];\r\n }else{\r\n console.error(\"变量 \"+value+\" 不存在\");\r\n value = \"\";\r\n }\r\n }else{\r\n value = sd.value;\r\n }\r\n this.initSearchData[sd.key] = value;\r\n }\r\n },\r\n change(activeNames){\r\n if(activeNames.length==0){\r\n this.arrowIcon = \"el-icon-arrow-up\";\r\n }else{\r\n this.arrowIcon = \"el-icon-arrow-down\";\r\n }\r\n },\r\n initFormCallBack(){\r\n this.$nextTick(() => {\r\n if (this.props.formInitMethod&&formUtil.parentVmExist(this.parentVm, this.props.formInitMethod)) {\r\n this.parentVm._self[this.props.formInitMethod](this.$refs.form);\r\n }\r\n });\r\n },\r\n initTableCallBack(){\r\n this.$nextTick(() => {\r\n if (this.props.tableInitMethod&&formUtil.parentVmExist(this.parentVm, this.props.tableInitMethod)) {\r\n this.parentVm._self[this.props.tableInitMethod](this.$refs.table);\r\n }\r\n });\r\n },\r\n editFormM(){\r\n this.$nextTick(() => {\r\n if (formUtil.parentVmExist(this.parentVm, \"editFormM\")) {\r\n this.parentVm._self[\"editFormM\"](this.$refs.form);\r\n }\r\n });\r\n }\r\n },\r\n}\r\n</script>\r\n<style>\r\n.mftcc-collapse>.el-collapse-item{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-collapse>.el-collapse-item>.el-collapse-item__wrap{\r\n flex-grow: 1;\r\n}\r\n.isAutoHeight{\r\n height: unset !important;\r\n min-height: unset !important;\r\n max-height: unset !important;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-collapse>.el-collapse-item{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.mftcc-collapse>.el-collapse-item>.el-collapse-item__wrap{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n}\r\n.isAutoHeight{\r\n height: unset !important;\r\n min-height: unset !important;\r\n max-height: unset !important;\r\n}\r\n","<template>\r\n <el-card\r\n shadow=\"never\"\r\n :class=\"{ 'mftcc-card': true, isAutoHeight: props.isAutoHeight === true }\"\r\n :style=\"\r\n 'height:' +\r\n props.height +\r\n 'px;min-height:' +\r\n props.minHeight +\r\n 'px;max-height:' +\r\n props.maxHeight +\r\n 'px;'\r\n \"\r\n >\r\n <!-- <el-row> \r\n <el-link :underline=\"false\">{{ props.title }}</el-link>\r\n </el-row> -->\r\n <el-row v-if=\"props.preview === true || isPreview === true\" style=\"overflow: hidden\">\r\n <template v-if=\"props.importType == 'form'\">\r\n <mftcc-form\r\n :formId=\"props.formId\"\r\n :parentVm=\"parentVm\"\r\n ref=\"form\"\r\n @initCallBack=\"initFormCallBack\"\r\n ></mftcc-form>\r\n </template>\r\n <template v-else-if=\"props.importType == 'table'\">\r\n <mftcc-table\r\n :tableId=\"props.tableId\"\r\n :initSearchData=\"initSearchData\"\r\n :parentVm=\"parentVm\"\r\n ref=\"table\"\r\n @initCallBack=\"initTableCallBack\"\r\n ></mftcc-table>\r\n </template>\r\n <template v-else-if=\"props.importType == 'bizComp'\">\r\n <container :props=\"props\" :paramData=\"paramData\"> </container>\r\n </template>\r\n </el-row>\r\n </el-card>\r\n</template>\r\n<script>\r\nimport formUtil from \"../../utils/formUtil\";\r\nimport container from \"../layout/plugins/container\";\r\nexport default {\r\n data() {\r\n return {\r\n initSearchData: {},\r\n };\r\n },\r\n props: {\r\n props: {\r\n type: Object,\r\n default() {\r\n return {};\r\n },\r\n },\r\n parentVm: {\r\n type: Object,\r\n required: true,\r\n },\r\n isPreview: Boolean,\r\n paramData: {\r\n type: Object,\r\n default: function () {\r\n return {};\r\n },\r\n },\r\n },\r\n components: {\r\n container,\r\n },\r\n created() {\r\n this.initTableSearchData();\r\n },\r\n methods: {\r\n initTableSearchData() {\r\n this.initSearchData = {};\r\n let isd = this.props.initSearchData;\r\n for (let sd of isd) {\r\n let value;\r\n if (sd.value.startsWith(\"${\") && sd.value.endsWith(\"}\")) {\r\n value = sd.value.substring(2, sd.value.length - 1);\r\n if (typeof this.paramData[value] == \"undefined\") {\r\n value = this.paramData[value];\r\n } else {\r\n console.error(\"变量 \" + value + \" 不存在\");\r\n value = \"\";\r\n }\r\n } else {\r\n value = sd.value;\r\n }\r\n this.initSearchData[sd.key] = value;\r\n }\r\n },\r\n initFormCallBack() {\r\n this.$nextTick(() => {\r\n if (\r\n this.props.formInitMethod &&\r\n formUtil.parentVmExist(this.parentVm, this.props.formInitMethod)\r\n ) {\r\n this.parentVm._self[this.props.formInitMethod](this.$refs.form);\r\n }\r\n });\r\n },\r\n initTableCallBack() {\r\n this.$nextTick(() => {\r\n if (\r\n this.props.tableInitMethod &&\r\n formUtil.parentVmExist(this.parentVm, this.props.tableInitMethod)\r\n ) {\r\n this.parentVm._self[this.props.tableInitMethod](this.$refs.table);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-card {\r\n}\r\n\r\n.isAutoHeight {\r\n height: unset !important;\r\n min-height: unset !important;\r\n max-height: unset !important;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-card {\r\n}\r\n\r\n.isAutoHeight {\r\n height: unset !important;\r\n min-height: unset !important;\r\n max-height: unset !important;\r\n}\r\n","<template>\r\n <el-form\r\n :label-position=\"option.labelPosition\"\r\n :model=\"formData\"\r\n :rules=\"rules\"\r\n :ref=\"option.formId\"\r\n :disabled=\"isEmpty(option.formDisabled) ? false : option.formDisabled\"\r\n label-width=\"150px\"\r\n :class=\"\r\n search === 'search'\r\n ? 'mftcc-form-search'\r\n : option.query === 'query'\r\n ? 'mftcc-form-query'\r\n : 'mftcc-form'\r\n \"\r\n @submit.native.prevent\r\n >\r\n <el-row class=\"form-el-row\">\r\n <template v-for=\"(item, index) in option.formItem\">\r\n <template v-if=\"item.fieldType === 'label'\">\r\n <el-col :span=\"24\" :key=\"index\">\r\n <el-alert\r\n :title=\"item.label\"\r\n type=\"success\"\r\n effect=\"dark\"\r\n :closable=\"false\"\r\n style=\"margin-bottom: 22px\"\r\n >\r\n </el-alert>\r\n </el-col>\r\n </template>\r\n <template v-else>\r\n <el-col\r\n :span=\"\r\n isEmpty(option.columns)\r\n ? 24\r\n : Math.floor(24 / option.columns) *\r\n Math.floor(\r\n isEmpty(item.colspan)\r\n ? 1\r\n : item.colspan > option.columns\r\n ? option.columns\r\n : item.colspan\r\n )\r\n \"\r\n :key=\"item.fieldName\"\r\n >\r\n <template v-if=\"item.fieldType === 'group'\">\r\n <el-form-item\r\n :label=\"item.label\"\r\n :required=\"item.required\"\r\n v-show=\"isEmpty(item.isShow) ? true : item.isShow\"\r\n class=\"mftcc-form-group\"\r\n >\r\n <template v-for=\"(grouItem, groupIndex) in item.group\">\r\n <el-col\r\n :key=\"grouItem.fieldName + 'field'\"\r\n :span=\"\r\n Math.floor((24 - (item.group.length - 1) * 2) / item.group.length)\r\n \"\r\n v-show=\"isEmpty(grouItem.isShow) ? true : grouItem.isShow\"\r\n >\r\n <el-form-item :prop=\"grouItem.fieldName\">\r\n <template v-if=\"option.query === 'query'\">\r\n <span :title=\"formData[grouItem.fieldName]\">\r\n <template v-if=\"!isEmpty(grouItem.prepend)\">\r\n {{ grouItem.prepend }}\r\n </template>\r\n {{ formData[grouItem.fieldName] }}\r\n <template v-if=\"!isEmpty(grouItem.suffix)\">\r\n {{ grouItem.suffix }}\r\n </template>\r\n </span>\r\n </template>\r\n <template v-else-if=\"grouItem.fieldType === 'text'\">\r\n <template v-if=\"grouItem.dataType === 'money(yuan)'\">\r\n <el-input\r\n :ref=\"grouItem.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[grouItem.fieldName]\"\r\n :placeholder=\"\r\n isEmpty(grouItem.placeholder) ? '' : grouItem.placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(grouItem.disabled) ? false : grouItem.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(grouItem.readOnly) ? false : grouItem.readOnly\r\n \"\r\n v-on=\"events[grouItem.fieldName]\"\r\n @blur=\"blurFunc(grouItem.dataType, $event)\"\r\n @keyup.native=\"toMoney\"\r\n @click.native=\"clickFunc(grouItem, $event)\"\r\n :maxlength=\"grouItem.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(grouItem['show-word-limit'])\r\n ? false\r\n : grouItem['show-word-limit']\r\n \"\r\n >\r\n <!-- <template slot=\"append\">元</template> -->\r\n <template slot=\"suffix\">元</template>\r\n <template v-if=\"!isEmpty(grouItem.prepend)\">\r\n <template slot=\"prepend\">{{ grouItem.prepend }}</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"grouItem.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[grouItem.fieldName]\"\r\n :placeholder=\"\r\n isEmpty(grouItem.placeholder) ? '' : grouItem.placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(grouItem.disabled) ? false : grouItem.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(grouItem.readOnly) ? false : grouItem.readOnly\r\n \"\r\n v-on=\"events[grouItem.fieldName]\"\r\n @blur=\"blurFunc(grouItem.dataType, $event)\"\r\n @click.native=\"clickFunc(grouItem, $event)\"\r\n :maxlength=\"grouItem.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(grouItem['show-word-limit'])\r\n ? false\r\n : grouItem['show-word-limit']\r\n \"\r\n >\r\n <template v-if=\"!isEmpty(grouItem.prepend)\">\r\n <template slot=\"prepend\">{{ grouItem.prepend }}</template>\r\n </template>\r\n <template v-if=\"grouItem.dataType === 'money(jiao)'\">\r\n <template slot=\"suffix\">角</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'money(fen)'\">\r\n <template slot=\"suffix\">分</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'money(wan)'\">\r\n <template slot=\"suffix\">万元</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'money(yi)'\">\r\n <template slot=\"suffix\">亿元</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'percentile'\">\r\n <template slot=\"suffix\">%</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'thousand'\">\r\n <template slot=\"suffix\">‰</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'tenThousand'\">\r\n <template slot=\"suffix\">‱</template>\r\n </template>\r\n <template v-else-if=\"!isEmpty(grouItem.suffix)\">\r\n <template slot=\"suffix\">{{ grouItem.suffix }}</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n </template>\r\n <template v-else-if=\"grouItem.fieldType === 'number'\">\r\n <el-input\r\n :ref=\"grouItem.fieldName\"\r\n type=\"number\"\r\n v-model.number=\"formData[grouItem.fieldName]\"\r\n :placeholder=\"\r\n isEmpty(grouItem.placeholder) ? '' : grouItem.placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(grouItem.disabled) ? false : grouItem.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(grouItem.readOnly) ? false : grouItem.readOnly\r\n \"\r\n v-on=\"events[grouItem.fieldName]\"\r\n @click.native=\"clickFunc(grouItem, $event)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"grouItem.fieldType === 'date'\">\r\n <el-date-picker\r\n :ref=\"grouItem.fieldName\"\r\n v-model=\"formData[grouItem.fieldName]\"\r\n :format=\"\r\n formData[grouItem.fieldName] ===\r\n dateFormat(\r\n new Date('9999/12/31'),\r\n isEmpty(grouItem.dateFormat.valueFormat)\r\n ? 'yyyyMMdd'\r\n : grouItem.dateFormat.valueFormat\r\n )\r\n ? '长期'\r\n : isEmpty(grouItem.dateFormat.format)\r\n ? 'yyyy-MM-dd'\r\n : grouItem.dateFormat.format\r\n \"\r\n :value-format=\"\r\n isEmpty(grouItem.dateFormat.valueFormat)\r\n ? 'yyyyMMdd'\r\n : grouItem.dateFormat.valueFormat\r\n \"\r\n type=\"date\"\r\n :placeholder=\"\r\n isEmpty(grouItem.placeholder) ? '' : grouItem.placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(grouItem.disabled) ? false : grouItem.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(grouItem.readOnly) ? false : grouItem.readOnly\r\n \"\r\n :picker-options=\"\r\n !isEmpty(grouItem.dateOption) &&\r\n grouItem.dateOption.isLong === true\r\n ? pickerOptions\r\n : {}\r\n \"\r\n v-on=\"events[grouItem.fieldName]\"\r\n @click.native=\"clickFunc(grouItem, $event)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n </el-form-item>\r\n </el-col>\r\n <template v-if=\"groupIndex !== item.group.length - 1\">\r\n <el-col\r\n :key=\"grouItem.fieldName + 'line'\"\r\n class=\"line\"\r\n :span=\"2\"\r\n style=\"text-align: center\"\r\n v-show=\"isEmpty(grouItem.isShow) ? true : grouItem.isShow\"\r\n >{{\r\n isEmpty(grouItem.separator) ? \"-\" : grouItem.separator\r\n }}</el-col\r\n >\r\n </template>\r\n </template>\r\n </el-form-item>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'empty'\">\r\n <el-form-item>\r\n <span slot=\"label\"> </span>\r\n </el-form-item>\r\n </template>\r\n <template v-else>\r\n <el-form-item\r\n :label=\"item.label\"\r\n :prop=\"item.fieldName\"\r\n v-show=\"isEmpty(item.isShow) ? true : item.isShow\"\r\n >\r\n <template v-if=\"option.query === 'query'\">\r\n <span :title=\"formData[item.fieldName]\">\r\n <template v-if=\"!isEmpty(item.prepend)\">\r\n {{ item.prepend }}\r\n </template>\r\n {{ formData[item.fieldName] }}\r\n <template v-if=\"!isEmpty(item.suffix)\">\r\n {{ item.suffix }}\r\n </template>\r\n </span>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'text'\">\r\n <template v-if=\"item.dataType === 'money(yuan)'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @keyup.native=\"toMoney\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit']) ? false : item['show-word-limit']\r\n \"\r\n >\r\n <!-- <template slot=\"append\">元</template> -->\r\n <template slot=\"suffix\">元</template>\r\n <template v-if=\"!isEmpty(item.prepend)\">\r\n <template slot=\"prepend\">{{ item.prepend }}</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit']) ? false : item['show-word-limit']\r\n \"\r\n >\r\n <template v-if=\"!isEmpty(item.prepend)\">\r\n <template slot=\"prepend\">{{ item.prepend }}</template>\r\n </template>\r\n <template v-if=\"item.dataType === 'money(jiao)'\">\r\n <template slot=\"suffix\">角</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(fen)'\">\r\n <template slot=\"suffix\">分</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(wan)'\">\r\n <template slot=\"suffix\">万元</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(yi)'\">\r\n <template slot=\"suffix\">亿元</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'percentile'\">\r\n <template slot=\"suffix\">%</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'thousand'\">\r\n <template slot=\"suffix\">‰</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'tenThousand'\">\r\n <template slot=\"suffix\">‱</template>\r\n </template>\r\n <template v-else-if=\"!isEmpty(item.suffix)\">\r\n <template slot=\"suffix\">{{ item.suffix }}</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'password'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'checkbox'\">\r\n <el-checkbox-group\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n <el-checkbox\r\n v-for=\"boxItem in pramDicItem[item.fieldName]\"\r\n :key=\"boxItem.optCode\"\r\n :label=\"boxItem.optCode\"\r\n >\r\n {{ boxItem.optName }}</el-checkbox\r\n >\r\n </el-checkbox-group>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'select'\">\r\n <template v-if=\"item.dataType === 'library'\">\r\n <mftcc-library-select\r\n v-model=\"formData[item.fieldName]\"\r\n :url=\"item.library.url\"\r\n :realField=\"item.library.realField\"\r\n :showField=\"item.library.showField\"\r\n :multiple=\"false\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n v-on=\"events[item.fieldName]\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </mftcc-library-select>\r\n </template>\r\n <template v-else>\r\n <el-select\r\n autocomplete=\"off\"\r\n clearable\r\n filterable\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n <el-option\r\n v-for=\"selectItem in pramDicItem[item.fieldName]\"\r\n :key=\"selectItem.optCode\"\r\n :label=\"selectItem.optName\"\r\n :value=\"selectItem.optCode\"\r\n >\r\n </el-option>\r\n </el-select>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'multipleSelection'\">\r\n <template v-if=\"item.dataType === 'library'\">\r\n <mftcc-library-select\r\n v-model=\"formData[item.fieldName]\"\r\n :url=\"item.library.url\"\r\n :realField=\"item.library.realField\"\r\n :showField=\"item.library.showField\"\r\n :multiple=\"true\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n v-on=\"events[item.fieldName]\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </mftcc-library-select>\r\n </template>\r\n <template v-else>\r\n <el-select\r\n multiple\r\n autocomplete=\"off\"\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n <el-option\r\n v-for=\"selectItem in pramDicItem[item.fieldName]\"\r\n :key=\"selectItem.optCode\"\r\n :label=\"selectItem.optName\"\r\n :value=\"selectItem.optCode\"\r\n ></el-option>\r\n </el-select>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'radio'\">\r\n <el-radio-group\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n <el-radio\r\n v-for=\"radioItem in pramDicItem[item.fieldName]\"\r\n :key=\"radioItem.optCode\"\r\n :label=\"radioItem.optCode\"\r\n >\r\n {{ radioItem.optName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'switch'\">\r\n <el-switch\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :active-value=\"\r\n isEmpty(item.switchValue.activeValue)\r\n ? 0\r\n : item.switchValue.activeValue\r\n \"\r\n :inactive-value=\"\r\n isEmpty(item.switchValue.inActiveValue)\r\n ? 1\r\n : item.switchValue.inActiveValue\r\n \"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n ></el-switch>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'date'\">\r\n <el-date-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :format=\"\r\n formData[item.fieldName] ===\r\n dateFormat(\r\n new Date('9999/12/31'),\r\n isEmpty(item.dateFormat.valueFormat)\r\n ? 'yyyyMMdd'\r\n : item.dateFormat.valueFormat\r\n )\r\n ? '长期'\r\n : isEmpty(item.dateFormat.format)\r\n ? 'yyyy-MM-dd'\r\n : item.dateFormat.format\r\n \"\r\n :value-format=\"\r\n isEmpty(item.dateFormat.valueFormat)\r\n ? 'yyyyMMdd'\r\n : item.dateFormat.valueFormat\r\n \"\r\n type=\"date\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n :picker-options=\"\r\n !isEmpty(item.dateOption) && item.dateOption.isLong === true\r\n ? pickerOptions\r\n : {}\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'time'\">\r\n <el-time-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :format=\"\r\n isEmpty(item.dateFormat.format)\r\n ? 'HH:mm:ss'\r\n : item.dateFormat.format\r\n \"\r\n :value-format=\"\r\n isEmpty(item.dateFormat.valueFormat)\r\n ? 'HH:mm:ss'\r\n : item.dateFormat.valueFormat\r\n \"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n :picker-options=\"isEmpty(item.dateOption) ? {} : item.dateOption\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-time-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'datetime'\">\r\n <el-date-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :format=\"\r\n isEmpty(item.dateFormat.format)\r\n ? 'yyyy-MM-dd HH:mm:ss'\r\n : item.dateFormat.format\r\n \"\r\n :value-format=\"\r\n isEmpty(item.dateFormat.valueFormat)\r\n ? 'yyyyMMdd HH:mm:ss'\r\n : item.dateFormat.valueFormat\r\n \"\r\n type=\"datetime\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'number'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"number\"\r\n v-model.number=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'textarea'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"textarea\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit']) ? true : item['show-word-limit']\r\n \"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n ></el-input>\r\n </template>\r\n </el-form-item>\r\n </template>\r\n </el-col>\r\n </template>\r\n </template>\r\n </el-row>\r\n </el-form>\r\n</template>\r\n<script>\r\nimport { get, postJson, putJson } from \"../axios\";\r\nimport formUtil from \"../utils/formUtil\";\r\nexport default {\r\n props: [\"formId\", \"parentVm\", \"initData\", \"search\"],\r\n data() {\r\n return {\r\n option: {},\r\n formData: {},\r\n events: {},\r\n pramDicItem: {},\r\n rules: {},\r\n isEmpty: formUtil.isEmpty,\r\n toMoney: formUtil.toMoney,\r\n dateFormat: formUtil.dateFormat,\r\n pickerOptions: {\r\n shortcuts: [\r\n {\r\n text: \"今天\",\r\n onClick(picker) {\r\n picker.$emit(\"pick\", new Date());\r\n },\r\n },\r\n {\r\n text: \"长期\",\r\n onClick(picker) {\r\n picker.$emit(\"pick\", new Date(\"9999/12/31\"));\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n },\r\n watch: {\r\n formId: {\r\n handler(val, oldVal) {\r\n this.initForm();\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n initData() {\r\n this.initForm();\r\n },\r\n },\r\n methods: {\r\n resetForm(callback) {\r\n this.$refs[this.option.formId].resetFields();\r\n if (formUtil.isFunction(callback)) {\r\n callback();\r\n }\r\n },\r\n blurFunc(dataType, el) {\r\n formUtil.func_uior_valTypeImm(el, dataType);\r\n },\r\n clickFunc(item, el) {\r\n let events = item.events;\r\n for (let i in events) {\r\n if (\r\n this.option.formDisabled !== true &&\r\n item.disabled !== true &&\r\n events[i].type === \"click\" &&\r\n formUtil.parentVmExist(this, events[i].callback)\r\n ) {\r\n this.parentVm._self[events[i].callback](el);\r\n }\r\n }\r\n },\r\n validateForm(callback) {\r\n this.$refs[this.option.formId].validate((valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n validateField(parm, callback) {\r\n this.$refs[this.option.formId].validateField(parm, (valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n clearValidate() {\r\n this.$nextTick(() => {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.formId].clearValidate();\r\n } else if (arguments.length >= 1) {\r\n this.$refs[this.option.formId].clearValidate(arguments[1]);\r\n }\r\n });\r\n },\r\n getFormItems(formItem) {\r\n let formItems = [];\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n formItems.push(groupItem[j]);\r\n }\r\n } else {\r\n formItems.push(formItem[i]);\r\n }\r\n }\r\n return formItems;\r\n },\r\n setFormValue() {\r\n let formItem = this.option.formItem;\r\n if (arguments.length === 1) {\r\n for (let i in arguments[0]) {\r\n this.setFormValue(i, arguments[0][i]);\r\n }\r\n } else if (arguments.length >= 2) {\r\n if (this.formData.hasOwnProperty(arguments[0]) || arguments[2] === true) {\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let formField = formItems[i];\r\n if (formField !== null && arguments[0] === formField.fieldName) {\r\n let value = arguments[1];\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n let checkValue = [];\r\n if (!this.isEmpty(value)) {\r\n let checkArray = value.split(\"|\");\r\n for (let k in checkArray) {\r\n if (!this.isEmpty(checkArray[k])) {\r\n checkValue.push(checkArray[k]);\r\n }\r\n }\r\n }\r\n value = checkValue;\r\n } else if (formField.fieldType === \"text\") {\r\n if (formField.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(value);\r\n } else if (formField.dataType === \"money(wan)\") {\r\n value = formUtil.numDiv(value, 10000);\r\n } else if (formField.dataType === \"money(baiwan)\") {\r\n value = formUtil.numDiv(value, 1000000);\r\n } else if (formField.dataType === \"money(yi)\") {\r\n value = formUtil.numDiv(value, 100000000);\r\n } else if (formField.dataType === \"percentile\") {\r\n value = formUtil.numMulti(value, 100);\r\n } else if (formField.dataType === \"thousand\") {\r\n value = formUtil.numMulti(value, 1000);\r\n } else if (formField.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(value, 10000);\r\n }\r\n }\r\n if (this.option.query === \"query\") {\r\n let parmArray = this.pramDicItem[formField.fieldName];\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n let checkBoxValue = \"\";\r\n for (let h in value) {\r\n if (!this.isEmpty(value[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (formField.fieldType === \"switch\") {\r\n if (formField.switchValue.activeValue === value) {\r\n value = \"是\";\r\n } else {\r\n value = \"否\";\r\n }\r\n } else if (formField.fieldType === \"date\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd\";\r\n let format = \"yyyy-MM-dd\";\r\n if (!this.isEmpty(formField.dateFormat)) {\r\n if (!this.isEmpty(formField.dateFormat.valueFormat)) {\r\n valueFormat = formField.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(formField.dateFormat.format)) {\r\n format = formField.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(\r\n formUtil.formatDate(value, valueFormat),\r\n format\r\n );\r\n } catch (error) {\r\n console.error(formField.fieldName + \"日期数据解析错误\");\r\n }\r\n } else if (formField.fieldType === \"datetime\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n let format = \"yyyy-MM-dd HH:mm:ss\";\r\n if (!this.isEmpty(formField.dateFormat)) {\r\n if (!this.isEmpty(formField.dateFormat.valueFormat)) {\r\n valueFormat = formField.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(formField.dateFormat.format)) {\r\n format = formField.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(\r\n formUtil.formatDate(value, valueFormat),\r\n format\r\n );\r\n } catch (error) {\r\n console.error(formField.fieldName + \"日期数据解析错误\");\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n }\r\n if (\r\n this.option.formDisabled === true &&\r\n !this.isEmpty(formField.formatter) &&\r\n formUtil.parentVmExist(this, formField.formatter)\r\n ) {\r\n value = this.parentVm._self[formField.formatter](value);\r\n }\r\n this.$set(this.formData, arguments[0], value);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n getFormValue() {\r\n let formItem = this.option.formItem;\r\n let data = JSON.parse(JSON.stringify(this.formData)); //深度copy\r\n if (arguments.length === 0) {\r\n for (let j in data) {\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let formField = formItems[i];\r\n if (formField !== null && j === formField.fieldName) {\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n data[j] = data[j].join(\"|\");\r\n } else if (formField.fieldType === \"text\") {\r\n let formTextValue = data[j];\r\n if (formField.dataType === \"money(yuan)\") {\r\n formTextValue = formUtil.delcommafy(formTextValue);\r\n } else if (formField.dataType === \"money(wan)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 10000);\r\n } else if (formField.dataType === \"money(baiwan)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 1000000);\r\n } else if (formField.dataType === \"money(yi)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 100000000);\r\n } else if (formField.dataType === \"percentile\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 100);\r\n } else if (formField.dataType === \"thousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 1000);\r\n } else if (formField.dataType === \"tenThousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 10000);\r\n }\r\n data[j] = formTextValue;\r\n }\r\n }\r\n }\r\n }\r\n return data;\r\n } else if (arguments.length >= 1) {\r\n let result = this.getFormValue();\r\n if (!this.isEmpty(result)) {\r\n result = result[arguments[0]];\r\n }\r\n return result;\r\n }\r\n },\r\n attr() {\r\n let formItem = this.option.formItem;\r\n if (arguments.length === 2) {\r\n let formField = null;\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n if (arguments[0] === groupItem[j].fieldName) {\r\n formField = groupItem[j];\r\n }\r\n }\r\n } else {\r\n if (arguments[0] === formItem[i].fieldName) {\r\n formField = formItem[i];\r\n }\r\n }\r\n }\r\n let value = \"\";\r\n if (formField !== null) {\r\n if (arguments[1] === \"dicItem\") {\r\n value = this.pramDicItem[arguments[0]];\r\n } else if (arguments[1] === \"events\") {\r\n value = this.events[arguments[0]];\r\n } else if (arguments[1] === \"rules\") {\r\n value = this.rules[arguments[0]];\r\n } else {\r\n value = formField[arguments[1]];\r\n }\r\n }\r\n return value;\r\n } else if (arguments.length >= 3) {\r\n let formField = null;\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n if (arguments[0] === groupItem[j].fieldName) {\r\n formField = groupItem[j];\r\n formField[\"formItem\"] = formItem[i];\r\n formField[\"label\"] = formItem[i].label;\r\n }\r\n }\r\n } else {\r\n if (arguments[0] === formItem[i].fieldName) {\r\n formField = formItem[i];\r\n }\r\n }\r\n }\r\n if (formField !== null) {\r\n if (arguments[1] === \"dicItem\") {\r\n this.$set(this.pramDicItem, arguments[0], arguments[2]);\r\n } else if (arguments[1] === \"events\") {\r\n //解析事件\r\n try {\r\n let eventsArray = arguments[2];\r\n let event = {};\r\n for (let evetIndex in eventsArray) {\r\n if (\r\n !this.isEmpty(eventsArray[evetIndex].type) &&\r\n eventsArray[evetIndex].type !== \"click\" &&\r\n formUtil.parentVmExist(this, eventsArray[evetIndex].callback)\r\n ) {\r\n event[eventsArray[evetIndex].type] = this.parentVm._self[\r\n eventsArray[evetIndex].callback\r\n ];\r\n }\r\n }\r\n this.$set(this.events, formField.fieldName, event);\r\n } catch (error) {\r\n console.error(\"事件解析错误:\" + error);\r\n this.$set(this.events, formField.fieldName, {});\r\n }\r\n } else if (arguments[1] === \"rules\") {\r\n //解析规则\r\n try {\r\n //解析规则\r\n let formRules = arguments[2];\r\n let fieldNameRules = [];\r\n if (formField.fieldType === \"text\") {\r\n let type = formField.dataType;\r\n if (type === \"int\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateInt;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"long\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateLong;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (\r\n type == \"double(2)\" ||\r\n type == \"double(4)\" ||\r\n type == \"double(6)\" ||\r\n type == \"money(fen)\" ||\r\n type == \"money(jiao)\" ||\r\n type == \"money(wan)\" ||\r\n type == \"money(yi)\" ||\r\n type == \"percentile\" ||\r\n type === \"thousand\" ||\r\n type == \"tenThousand\"\r\n ) {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateNumber;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"float\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateFloat;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"boolean\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateBoolean;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type === \"money(yuan)\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateMoney;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n }\r\n\r\n for (let k in formRules) {\r\n let fieldNameRule = {};\r\n let trigger = \"blur\";\r\n let message = \"\";\r\n let type = \"\";\r\n if (formRules[k].type === \"required\") {\r\n if (!this.isEmpty(formField[\"formItem\"])) {\r\n formField[\"formItem\"].required = true;\r\n }\r\n fieldNameRule[\"required\"] = true;\r\n trigger = \"blur\";\r\n message = formField.label + \"不能为空\";\r\n } else if (formRules[k].type === \"validator\") {\r\n if (formUtil.parentVmExist(this, formRules[k].validator)) {\r\n fieldNameRule[\"validator\"] = this.parentVm._self[\r\n formRules[k].validator\r\n ];\r\n }\r\n trigger = \"blur\";\r\n } else if (formRules[k].type === \"number\") {\r\n trigger = \"blur\";\r\n message = formField.label + \"必须为数字\";\r\n type = \"number\";\r\n } else if (formRules[k].type === \"email\") {\r\n trigger = \"blur\";\r\n message = formField.label + \"格式不正确\";\r\n type = \"email\";\r\n } else if (formRules[k].type === \"phone\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的手机号码\";\r\n fieldNameRule[\"pattern\"] = /^1[123456789]\\d{9}$/;\r\n } else if (formRules[k].type === \"mobile\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的电话\";\r\n fieldNameRule[\"pattern\"] = /^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$/;\r\n } else if (formRules[k].type === \"idNo\") {\r\n trigger = \"blur\";\r\n fieldNameRule[\"validator\"] = formUtil.validateIdNo;\r\n } else {\r\n //continue\r\n }\r\n\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n type = \"array\";\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].min) && !this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message =\r\n formField.label +\r\n \"长度必须大于等于\" +\r\n formRules[k].min +\r\n \"并且小于等于\" +\r\n formRules[k].max;\r\n } else if (!this.isEmpty(formRules[k].min)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n message = formField.label + \"长度必须大于等于\" + formRules[k].min;\r\n } else if (!this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message = formField.label + \"长度必须小于等于\" + formRules[k].max;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].message)) {\r\n message = formRules[k].message;\r\n }\r\n fieldNameRule[\"message\"] = message;\r\n\r\n if (!this.isEmpty(type)) {\r\n fieldNameRule[\"type\"] = type;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].trigger)) {\r\n trigger = formRules[k].trigger;\r\n }\r\n fieldNameRule[\"trigger\"] = trigger;\r\n\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n this.$set(this.rules, formField.fieldName, fieldNameRules);\r\n } catch (error) {\r\n console.error(\"规则解析错误:\" + error);\r\n this.$set(this.rules, formField.fieldName, []);\r\n }\r\n } else {\r\n formField[arguments[1]] = arguments[2];\r\n }\r\n }\r\n }\r\n },\r\n async initForm() {\r\n let _this = this;\r\n _this.option = {};\r\n _this.formData = {};\r\n _this.events = {};\r\n _this.pramDicItem = {};\r\n _this.rules = {};\r\n let formData;\r\n if (_this.formId) {\r\n try {\r\n let formData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/form/\" + this.formId + \".json\"\r\n );\r\n _this.option = JSON.parse(JSON.stringify(formData.data));\r\n } catch (error) {\r\n _this.$message.error(\r\n \"未找到 [ \" + _this.formId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n }\r\n if (_this.initData !== undefined) {\r\n _this.option = Object.assign(_this.option, _this.initData);\r\n }\r\n let formItem = _this.option.formItem;\r\n let dicKeyArray = [];\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n //解析字典项\r\n let dicKey = formItems[i].dicKey;\r\n if (!_this.isEmpty(dicKey) && formItems[i].optionType !== \"1\") {\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = formItems[i].fieldName;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n _this.$set(_this.pramDicItem, formItems[i].fieldName, formItems[i].dicItem);\r\n }\r\n\r\n if (\r\n Array.isArray(formItems[i].value) &&\r\n (formItems[i].fieldType === \"checkbox\" ||\r\n formItems[i].fieldType === \"multipleSelection\")\r\n ) {\r\n formItems[i].value = formItems[i].value.join(\"|\");\r\n }\r\n\r\n _this.setFormValue(formItems[i].fieldName, formItems[i].value, true);\r\n\r\n //解析事件\r\n _this.attr(formItems[i].fieldName, \"events\", formItems[i].events);\r\n\r\n //解析规则\r\n _this.attr(formItems[i].fieldName, \"rules\", formItems[i].rules);\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n }\r\n });\r\n\r\n _this.clearValidate();\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-form,\r\n.mftcc-form-search {\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n.mftcc-form .el-form-item__content,\r\n.mftcc-form-search .el-form-item__content {\r\n width: auto;\r\n}\r\n.mftcc-form .el-form-item,\r\n.mftcc-form-search .el-form-item {\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item,\r\n.mftcc-form-search .mftcc-form-group .el-form-item {\r\n padding: 0;\r\n}\r\n.mftcc-form .el-select,\r\n.mftcc-form-search .el-select {\r\n width: 100%;\r\n}\r\n.mftcc-form .form-el-row,\r\n.mftcc-form-search .form-el-row {\r\n width: 100%;\r\n}\r\n</style>\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n class=\"form-dialog\"\r\n :width=\"width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n :fullscreen=\"fullscreen||false\"\r\n :close-on-click-modal=\"false\"\r\n :center=\"center||false\">\r\n <div slot=\"title\" class=\"dialog-header\">\r\n {{ title||\"form表单\" }}\r\n </div>\r\n <div class=\"dialog-content\">\r\n <mftcc-form :formId=\"formId\" :parentVm=\"parentVm\" ref=\"dialogForm\"></mftcc-form> \r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\" v-if=\"footer === false?false:true\"> \r\n <el-button type=\"primary\" @click=\"submit\">{{confirmButtonText||\"确 定\"}}</el-button>\r\n <el-button @click=\"visible = false\">{{cancelButtonText||\"取 消\"}}</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport mftccForm from '../components/mftccForm'\r\n export default {\r\n data() {\r\n return {\r\n visible: this.show\r\n }\r\n },\r\n props: [\"show\",\"width\",\"height\",\"fullscreen\",\"center\",\"formId\",\"parentVm\",\"footer\",\"title\",\"confirmButtonText\",\"cancelButtonText\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show;\r\n },\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n getFormRef(callback){\r\n this.$nextTick(() => {\r\n if(typeof callback === 'function'){\r\n callback(this.$refs.dialogForm)\r\n }\r\n })\r\n },\r\n submit(){\r\n var value = this.$refs.dialogForm.getFormValue();\r\n this.$emit('callback', value);\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.height||'600px';\r\n }\r\n },\r\n components: {\r\n mftccForm\r\n }\r\n }\r\n</script>\r\n<style>\r\n.form-dialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.form-dialog .el-dialog__body{\r\n flex-grow: 1;\r\n overflow: auto;\r\n padding-top: 10px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.form-dialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.form-dialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n overflow: auto;\r\n padding-top: 10px;\r\n}\r\n","<template>\r\n <div\r\n ref=\"mftccTable\"\r\n style=\"flex-grow: 1; position: relative\"\r\n :class=\"option.query === 'query' ? 'mftcc-table-query' : 'mftcc-table'\"\r\n >\r\n <div class=\"tableTools\">\r\n <el-dropdown\r\n size=\"small\"\r\n v-if=\"option.isDColumn\"\r\n :hide-on-click=\"false\"\r\n class=\"el-dropdown-DColumn\"\r\n trigger=\"click\"\r\n >\r\n <el-button icon=\"el-icon-setting\" type=\"primary\" class=\"mftcc-table-dropdown\">\r\n </el-button>\r\n <el-dropdown-menu slot=\"dropdown\" style=\"text-align: center\">\r\n <div style=\"text-align: left\">\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-dropdown-item :key=\"index\" v-if=\"col.prop != ''\">\r\n <el-checkbox\r\n :checked=\"col.isShow\"\r\n v-model=\"col.isShow\"\r\n @change=\"checkChange(col)\"\r\n >{{ col.label }}</el-checkbox\r\n >\r\n </el-dropdown-item>\r\n </template>\r\n </div>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n <el-button\r\n v-if=\"option.isExport && $hasPerm(option.isExportPerm || true)\"\r\n type=\"primary\"\r\n class=\"exportBtn\"\r\n icon=\"el-icon-download\"\r\n @click=\"exportTable\"\r\n ></el-button>\r\n </div>\r\n <div v-loading=\"option.loading\">\r\n <el-table\r\n :data=\"option.tableData\"\r\n :max-height=\"maxHeight\"\r\n :height=\"height\"\r\n highlight-current-row\r\n :ref=\"option.tableId\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无数据\"\r\n :row-style=\"rowStyle\"\r\n :row-class-name=\"rowClassName\"\r\n :cell-style=\"cellStyle\"\r\n :cell-class-name=\"cellClassName\"\r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n >\r\n <template\r\n v-if=\"option.isSelect != '' && option.isSelect ? option.isSelect : false\"\r\n >\r\n <el-table-column type=\"selection\" width=\"55\"> </el-table-column>\r\n </template>\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-table-column\r\n v-if=\"col.prop != '' ? col.isShow : true\"\r\n :key=\"index\"\r\n :prop=\"col.prop\"\r\n :label=\"col.label\"\r\n :show-overflow-tooltip=\"col['show-overflow-tooltip'] === true ? true : false\"\r\n :min-width=\"col.width\"\r\n :fixed=\"col.fixed || false\"\r\n :align=\"col.align || 'left'\"\r\n :width=\"col.prop == '' ? col.width : ''\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <div v-if=\"col.prop == ''\">\r\n <template v-for=\"(btn, key) in col.data\">\r\n <el-button\r\n :key=\"key\"\r\n size=\"mini\"\r\n :disabled=\"buttonAuth(btn, scope.row)\"\r\n v-if=\"$hasPerm(btn.perm || true)\"\r\n @click=\"Fn(btn.type, scope.$index, scope.row)\"\r\n >{{ btn.label }}</el-button\r\n >\r\n </template>\r\n </div>\r\n <div v-else-if=\"col.href != undefined\">\r\n <div v-if=\"col.href.path != undefined\">\r\n <a href=\"javascript:void(0)\" @click=\"router(col.href, scope.row)\">{{\r\n tableFormatter(scope.row[col.prop], col)\r\n }}</a>\r\n </div>\r\n <div v-else-if=\"col.href.callbackType != undefined\">\r\n <a\r\n href=\"javascript:void(0)\"\r\n @click=\"Fn(col.href.callbackType, scope.$index, scope.row)\"\r\n >{{ tableFormatter(scope.row[col.prop], col) }}</a\r\n >\r\n </div>\r\n <div v-else>\r\n <span>{{ tableFormatter(scope.row[col.prop], col) }}</span>\r\n </div>\r\n </div>\r\n <div v-else-if=\"col.fieldType === 'switch'\">\r\n <el-switch\r\n v-model=\"scope.row[col.prop]\"\r\n :active-value=\"\r\n isEmpty(col.switchAttr) || isEmpty(col.switchAttr.activeValue)\r\n ? 0\r\n : col.switchAttr.activeValue\r\n \"\r\n :inactive-value=\"\r\n isEmpty(col.switchAttr) || isEmpty(col.switchAttr.inActiveValue)\r\n ? 1\r\n : col.switchAttr.inActiveValue\r\n \"\r\n :disabled=\"\r\n isEmpty(col.switchAttr) || isEmpty(col.switchAttr.disabled)\r\n ? false\r\n : col.switchAttr.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(col.switchAttr) || isEmpty(col.switchAttr.readOnly)\r\n ? false\r\n : col.switchAttr.readOnly\r\n \"\r\n @change=\"Fn(col.switchAttr.changeEvent, scope.$index, scope.row)\"\r\n ></el-switch>\r\n </div>\r\n <div v-else>\r\n <span>{{ tableFormatter(scope.row[col.prop], col) }}</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </template>\r\n <!-- <el-table-column \r\n label=\"操作\"\r\n :min-width=\"option.buttons.width\">\r\n <template slot-scope=\"scope\">\r\n <el-button v-for=\"(btn,index) in option.buttons.data\" \r\n :key=\"index\" \r\n size=\"mini\" \r\n v-if=\"$hasPerm(btn.perm||true)\" \r\n @click=\"Fn(btn.type, scope.$index, scope.row)\">{{ btn.label }}</el-button>\r\n </template>\r\n </el-table-column> -->\r\n </el-table>\r\n </div>\r\n <el-pagination\r\n v-if=\"option.isPagination\"\r\n background\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n :page-size=\"pageSize\"\r\n :current-page=\"pageNo\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n :total=\"pageTotal\"\r\n >\r\n </el-pagination>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { findByPage, getParameter } from \"../axios\";\r\nimport formUtil from \"../utils/formUtil\";\r\nexport default {\r\n data() {\r\n return {\r\n option: {},\r\n searchData: {},\r\n maxHeight: null,\r\n height: null,\r\n pageNo: 1,\r\n pageSize: 10,\r\n pageTotal: 0,\r\n currentRow: null,\r\n\r\n isEmpty: formUtil.isEmpty,\r\n pramDicItem: {},\r\n exportHeader: [],\r\n exportField: [],\r\n };\r\n },\r\n props: [\"tableId\", \"initData\", \"initSearchData\", \"parentVm\"],\r\n watch: {\r\n tableId: {\r\n handler(val, oldVal) {\r\n this.initTable(() => {\r\n this.$emit(\"callback\");\r\n });\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n },\r\n mounted() {\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n },\r\n methods: {\r\n rowStyle(obj) {\r\n let event = this.option[\"row-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n rowClassName(obj) {\r\n let event = this.option[\"row-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n cellStyle(obj) {\r\n let event = this.option[\"cell-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n cellClassName(obj) {\r\n let event = this.option[\"cell-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n buttonAuth(btn, row) {\r\n let buttonAuth = false;\r\n let auth = btn.auth || \"\";\r\n let authArray = auth.split(\";\");\r\n for (let i in authArray) {\r\n if (!this.isEmpty(authArray[i])) {\r\n let authObj = authArray[i].split(\"-\");\r\n if (authObj.length === 2) {\r\n if (this.$store.getters.buttonAuth[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n } else if (row[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n }\r\n }\r\n }\r\n }\r\n return buttonAuth;\r\n },\r\n tableFormatter(cellValue, item) {\r\n let _this = this;\r\n let value = \"\";\r\n if (_this.isEmpty(cellValue)) {\r\n return cellValue;\r\n } else {\r\n value = cellValue;\r\n }\r\n let parmArray = _this.pramDicItem[item.prop];\r\n if (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\") {\r\n let checkBoxValue = \"\";\r\n let checkArray = cellValue.split(\"|\");\r\n for (let h in checkArray) {\r\n if (!_this.isEmpty(checkArray[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === checkArray[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (item.fieldType === \"text\") {\r\n if (item.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(cellValue);\r\n } else if (item.dataType === \"percentile\") {\r\n value = formUtil.numMulti(cellValue, 100);\r\n } else if (item.dataType === \"thousand\") {\r\n value = formUtil.numMulti(cellValue, 1000);\r\n } else if (item.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(cellValue, 10000);\r\n }\r\n } else if (item.fieldType === \"date\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd\";\r\n let format = \"yyyy-MM-dd\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else if (item.fieldType === \"datetime\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n let format = \"yyyy-MM-dd HH:mm:ss\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === cellValue) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n if (\r\n !_this.isEmpty(item.formatter) &&\r\n formUtil.parentVmExist(this, item.formatter)\r\n ) {\r\n value = this.parentVm._self[item.formatter](value);\r\n } else if (!_this.isEmpty(item.desensitization)) {\r\n value = formUtil.desensitization(value, item.desensitization);\r\n }\r\n return value;\r\n },\r\n Fn(method, index, row) {\r\n // this[method](index, row);\r\n //this.$emit('callback', method, index, row);\r\n if (formUtil.parentVmExist(this, method)) {\r\n this.parentVm._self[method](index, row);\r\n }\r\n },\r\n router(href, row) {\r\n let path = href.path;\r\n let query = {};\r\n for (let queryKey of href.query) {\r\n query[queryKey] = row[queryKey];\r\n }\r\n this.$router.push({ path: path, query: query });\r\n },\r\n tableResize() {\r\n if (!this.option.height || this.option.height == \"auto\") {\r\n if (this.option.maxHeight) {\r\n this.maxHeight = this.option.maxHeight;\r\n } else {\r\n this.maxHeight = this.$refs.mftccTable.offsetHeight;\r\n }\r\n this.option.maxHeight = this.maxHeight;\r\n if (this.option.isPagination === true) {\r\n if ((this.maxHeight + \"\").endsWith(\"px\")) {\r\n this.maxHeight =\r\n Number(this.maxHeight.substring(0, this.maxHeight.length - 2)) - 40;\r\n } else {\r\n this.maxHeight = Number(this.maxHeight) - 40;\r\n }\r\n }\r\n if (this.maxHeight <= 0) {\r\n this.maxHeight = null;\r\n }\r\n } else {\r\n this.height = this.option.height;\r\n }\r\n },\r\n getTableData(pageNo, pageSize, callback) {\r\n var _this = this;\r\n this.searchData = this.searchData || {};\r\n this.searchData.pageNo = pageNo;\r\n this.searchData.pageSize = pageSize;\r\n _this.option.tableData = [];\r\n findByPage(\r\n this.option.url,\r\n this.searchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n let dataList = res.list;\r\n if (_this.option.isPagination === true || pageSize == -1) {\r\n _this.option.tableData = dataList.records;\r\n _this.pageNo = dataList.current; // 当前页数\r\n _this.pageSize = dataList.size; // 每页数量\r\n _this.pageTotal = dataList.total; // 页面总数\r\n let colList = res.colList;\r\n if (colList && colList.length > 0) {\r\n _this.option.columns = colList;\r\n }\r\n } else {\r\n _this.option.tableData = dataList;\r\n }\r\n }\r\n _this.option.loading = false;\r\n _this.$nextTick(() => {\r\n _this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n },\r\n (error) => {\r\n _this.option.loading = false;\r\n _this.$nextTick(() => {\r\n _this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n }\r\n );\r\n },\r\n refresh() {\r\n this.getTableData(this.pageNo, this.pageSize);\r\n },\r\n search(searchData) {\r\n this.pageNo = 1;\r\n this.pageSize = 10;\r\n this.pageTotal = 0;\r\n this.currentRow = null;\r\n this.searchData = this.initSearchData || {};\r\n if (!this.isEmpty(searchData)) {\r\n for (let i in searchData) {\r\n this.searchData[i] = searchData[i];\r\n }\r\n }\r\n this.getTableData(this.pageNo, this.pageSize);\r\n },\r\n // handleRowChange(val) {\r\n // this.currentRow = val;\r\n // },\r\n handleSizeChange(val) {\r\n this.getTableData(1, val);\r\n },\r\n handleCurrentChange(val) {\r\n this.getTableData(val, this.pageSize);\r\n },\r\n checkChange(col) {\r\n console.log(col);\r\n },\r\n setSelectValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].clearSelection();\r\n } else if (arguments.length === 1) {\r\n this.setSelectValue(this.option.selectKey, arguments[0]);\r\n } else if (arguments.length === 2) {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(tableDatas[i]);\r\n }\r\n }\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(\r\n tableDatas[i],\r\n arguments[2]\r\n );\r\n }\r\n }\r\n }\r\n },\r\n getSelectValue() {\r\n let parmKeyArray = this.$refs[this.option.tableId].store.states.selection;\r\n return parmKeyArray;\r\n },\r\n setCurrentValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].setCurrentRow();\r\n } else if (arguments.length === 1) {\r\n this.setCurrentValue(this.option.selectKey, arguments[0]);\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n tableDatas[i][selectKey] === arguments[1]\r\n ) {\r\n this.$refs[this.option.tableId].setCurrentRow(tableDatas[i]);\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n getCurrentValue() {\r\n return this.currentRow;\r\n },\r\n currentChange(currentRow, oldCurrentRow) {\r\n this.currentRow = currentRow;\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n async initTable(callback) {\r\n let _this = this;\r\n _this.option = {};\r\n _this.searchData = _this.initSearchData || {};\r\n _this.maxHeight = null;\r\n _this.height = null;\r\n _this.pageNo = 1;\r\n _this.pageSize = 10;\r\n _this.pageTotal = 0;\r\n _this.currentRow = null;\r\n let tableData;\r\n try {\r\n if (this.tableId) {\r\n let jsonData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/table/\" + this.tableId + \".json\"\r\n );\r\n tableData = jsonData.data;\r\n }\r\n } catch (error) {\r\n _this.$message.error(\r\n \"未找到 [ \" + this.tableId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n _this.option = JSON.parse(JSON.stringify(tableData));\r\n if (_this.initData !== undefined) {\r\n for (let i in _this.initData) {\r\n _this.option[i] = _this.initData[i];\r\n }\r\n }\r\n\r\n let formItem = _this.option.columns;\r\n let dicKeyArray = [];\r\n for (let i in formItem) {\r\n if (formItem[i].prop !== \"\") {\r\n //解析字典项\r\n let dicKey = formItem[i].dicKey;\r\n if (!_this.isEmpty(dicKey)) {\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = formItem[i].prop;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n _this.$set(_this.pramDicItem, formItem[i].prop, formItem[i].dicItem);\r\n }\r\n\r\n //获取库中选择字典\r\n if (\r\n (formItem[i].fieldType === \"select\" ||\r\n formItem[i].fieldType === \"multipleSelection\") &&\r\n formItem[i].dataType === \"library\"\r\n ) {\r\n getParameter(\r\n formItem[i].library.url,\r\n { query: \"\" },\r\n true,\r\n function (reponse) {\r\n if (reponse.code === 0) {\r\n let parmArray = [];\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (!_this.isEmpty(formItem[i].library.realField)) {\r\n realField = formItem[i].library.realField;\r\n }\r\n if (!_this.isEmpty(formItem[i].library.showField)) {\r\n showField = formItem[i].library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n optCode: list[i][realField],\r\n optName: list[i][showField],\r\n };\r\n parmArray.push(option);\r\n }\r\n _this.$set(_this.pramDicItem, formItem[i].prop, parmArray);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n }\r\n });\r\n\r\n let url = _this.option.url;\r\n if (url !== undefined && url !== null && url !== \"\") {\r\n _this.getTableData(_this.pageNo, _this.pageSize, callback);\r\n } else {\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n }\r\n // _this.$nextTick(() => {\r\n // _this.tableResize();\r\n // })\r\n },\r\n exportTable() {\r\n this.$confirm(\"确定要导出当前列表全部数据?\", \"提示\", {\r\n dangerouslyUseHTMLString: true,\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n })\r\n .then(() => {\r\n this.getExpportData();\r\n })\r\n .catch(() => {});\r\n },\r\n getExpportData() {\r\n let loading = this.$loading({\r\n lock: true,\r\n text: \"正在拼命导出......\",\r\n spinner: \"el-icon-loading\",\r\n background: \"rgba(0, 0, 0, 0.7)\",\r\n });\r\n this.searchData = this.searchData || {};\r\n this.searchData.pageNo = 1;\r\n this.searchData.pageSize = -1;\r\n\r\n findByPage(\r\n this.option.url,\r\n this.searchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0 && res.list.records.length > 0) {\r\n require.ensure([], () => {\r\n /* eslint-disable */\r\n // 这里的径路要修改正确\r\n const { export_json_to_excel } = require(\"../plugins/Export2Excel.js\");\r\n /* eslint-enable */\r\n for (let c in this.option.columns) {\r\n if (this.option.columns[c].prop != \"\") {\r\n this.exportField.push(this.option.columns[c].prop);\r\n this.exportHeader.push(this.option.columns[c].label);\r\n }\r\n }\r\n let tableData = res.list.records;\r\n const data = this.formatJson(this.option.columns, tableData);\r\n export_json_to_excel(this.exportHeader, data, this.tableId);\r\n loading.close();\r\n });\r\n } else {\r\n this.$alert(res.msg, this.$alertTitle, {\r\n type: res.msgType,\r\n dangerouslyUseHTMLString: true,\r\n });\r\n loading.close();\r\n }\r\n },\r\n (error) => {\r\n console.log(error);\r\n loading.close();\r\n }\r\n );\r\n },\r\n formatJson(columns, tableData) {\r\n let data = tableData.map((data) => {\r\n return columns.map((col) => {\r\n if (col.prop != \"\") {\r\n let value = data[col.prop];\r\n return this.tableFormatter(value, col);\r\n } else {\r\n return null;\r\n }\r\n });\r\n });\r\n return data;\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n.mftcc-table .tableTools {\r\n position: absolute;\r\n z-index: 1;\r\n top: 8px;\r\n right: 8px;\r\n}\r\n.mftcc-table .exportBtn {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-table .mftcc-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table-query .el-table__body,\r\n.mftcc-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n/* .mftcc-table.nothingModel{\r\n margin-top: 10px;\r\n padding-top: 8px;\r\n} */\r\n.mftcc-table .exportBtn {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-table .mftcc-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table-query .el-table__body,\r\n.mftcc-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n.errorMessage .el-message__content {\r\n line-height: 20px;\r\n}\r\n.errorMessage .el-message__closeBtn {\r\n top: 24px;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n class=\"mftcc-table-dialog\"\r\n :width=\"option.width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n :close-on-click-modal=\"false\"\r\n :title=\"option.title||title\">\r\n <div class=\"dialog-content\">\r\n <template v-if=\"(option.formId && option.search !== false)?true:false\">\r\n <div class=\"mftcc-search-form\">\r\n <el-row>\r\n <el-col :span=\"20\">\r\n <div class=\"custom-search\">\r\n <mftcc-search-form \r\n :formId=\"option.formId\" \r\n :parentVm=\"parentVm\" \r\n ref=\"searchForm\">\r\n </mftcc-search-form> \r\n </div>\r\n </el-col>\r\n <el-col :span=\"4\">\r\n <div class=\"search-button\">\r\n <el-button type=\"primary\" @click=\"onSearch\">查询</el-button>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n </template>\r\n <div class=\"mftcc-dialog-content\">\r\n <mftcc-table \r\n :tableId=\"option.tableId\" \r\n :parentVm=\"parentVm\" \r\n :initData=\"initData\" \r\n :initSearchData=\"initSearchData\" \r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n ref=\"dialogList\">\r\n </mftcc-table> \r\n </div>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\" v-if=\"option.footer === false?false:true\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {postJson} from '../axios'\r\nimport mftccTable from '../components/mftccTable'\r\nimport formUtil from '../utils/formUtil'\r\nimport mftccSearchForm from '../components/mftccSearchForm'\r\n export default {\r\n data() {\r\n return {\r\n title: \"列表筛选器\",\r\n initData: {},\r\n visible: this.show,\r\n initSearchData: \"\",\r\n isEmpty: formUtil.isEmpty\r\n }\r\n },\r\n props: [\"show\",\"option\",\"parentVm\"],\r\n watch: {\r\n show () {\r\n let _this = this\r\n _this.visible = _this.show;\r\n if(_this.visible === true){\r\n if(_this.option.type === \"radio\"){\r\n _this.$set(_this.initData,\"isSelect\",false)\r\n }else{\r\n _this.$set(_this.initData,\"isSelect\",true)\r\n }\r\n _this.$set(_this.initData,\"tableData\",_this.option.data)\r\n _this.$set(_this.initData,\"isPagination\",_this.option.isPagination)\r\n _this.$set(_this.initData,\"url\",_this.option.url)\r\n _this.initSearchData = _this.option.initSearchData || {}\r\n \r\n _this.$nextTick(() => {\r\n if(_this.option.search !== false && !_this.isEmpty(_this.option.formId)){\r\n _this.$refs.searchForm.initForm()\r\n let searchData = _this.$refs.searchForm.getFormValue() || {};\r\n for(let i in searchData){\r\n _this.initSearchData[i] = searchData[i]\r\n }\r\n }\r\n _this.$refs.dialogList.initTable(function(){\r\n setTimeout(function() {\r\n for(let i in _this.option.value){\r\n if(_this.option.type === \"radio\" && _this.option.value[i].key !== undefined){\r\n _this.$refs.dialogList.setCurrentValue(_this.option.value[i].key,_this.option.value[i].value)\r\n }else if(_this.option.value[i].key !== undefined){\r\n _this.$refs.dialogList.setSelectValue(_this.option.value[i].key,_this.option.value[i].value)\r\n }\r\n }\r\n },0)\r\n })\r\n })\r\n }\r\n },\r\n option:{//深度监听,可监听到对象、数组的变化\r\n handler(val, oldVal){\r\n \r\n },\r\n deep:true //true 深度监听\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n getFormRef(callback){\r\n this.$nextTick(() => {\r\n if(typeof callback === 'function'){\r\n callback(this.$refs.searchForm)\r\n }\r\n })\r\n },\r\n currentChange(currentRow, oldCurrentRow){\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n onSearch(){\r\n let data = this.$refs.searchForm.getFormValue()\r\n this.$refs.dialogList.search(data);\r\n },\r\n submit(){\r\n let value = [];\r\n if(this.option.type === \"radio\"){\r\n value = this.$refs.dialogList.getCurrentValue()\r\n }else{\r\n value = this.$refs.dialogList.getSelectValue()\r\n }\r\n this.$emit('callback', value);\r\n this.visible = false;\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.option.height||'600px';\r\n }\r\n },\r\n components: {\r\n mftccTable,\r\n mftccSearchForm\r\n }\r\n }\r\n</script>\r\n<style>\r\n.mftcc-table-dialog .search_form_div{\r\n display: flex;\r\n align-items: flex-start;\r\n}\r\n.mftcc-table-dialog .dialog-content{\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n}\r\n\r\n.mftcc-table-dialog .mftcc-search-form .search-button button{\r\n float: right;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content{\r\n flex-grow: 1;\r\n display: flex;\r\n}\r\n.mftcc-table-dialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-table-dialog .el-dialog__body{\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\n</style>","<template>\r\n <div\r\n ref=\"mftccEditTable\"\r\n style=\"width: 100%; flex-grow: 1; position: relative\"\r\n class=\"mftcc-edit-table\"\r\n >\r\n <el-dropdown\r\n size=\"small\"\r\n v-if=\"option.isDColumn\"\r\n :hide-on-click=\"false\"\r\n class=\"el-dropdown-DColumn\"\r\n trigger=\"click\"\r\n >\r\n <el-button icon=\"el-icon-setting\" type=\"primary\" class=\"mftcc-edit-table-dropdown\">\r\n </el-button>\r\n <el-dropdown-menu slot=\"dropdown\" style=\"text-align: center\">\r\n <div style=\"text-align: left\">\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-dropdown-item :key=\"index\" v-if=\"col.fieldName != ''\">\r\n <el-checkbox\r\n :checked=\"col.isShow\"\r\n v-model=\"col.isShow\"\r\n @change=\"checkChange(col)\"\r\n >{{ col.label }}</el-checkbox\r\n >\r\n </el-dropdown-item>\r\n </template>\r\n </div>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n <div v-loading=\"option.loading\">\r\n <el-form\r\n :model=\"formData\"\r\n :rules=\"rules\"\r\n :ref=\"option.formId\"\r\n @submit.native.prevent\r\n >\r\n <el-table\r\n :data=\"option.tableData\"\r\n :max-height=\"maxHeight\"\r\n :height=\"height\"\r\n highlight-current-row\r\n :ref=\"option.tableId\"\r\n style=\"width: 100%\"\r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n @row-click=\"rowClick\"\r\n @row-dblclick=\"rowDblclick\"\r\n empty-text=\"暂无数据\"\r\n :row-style=\"rowStyle\"\r\n :row-class-name=\"rowClassName\"\r\n :cell-style=\"cellStyle\"\r\n :cell-class-name=\"cellClassName\"\r\n >\r\n <template\r\n v-if=\"option.isSelect != '' && option.isSelect ? option.isSelect : false\"\r\n >\r\n <el-table-column type=\"selection\" width=\"55\"> </el-table-column>\r\n </template>\r\n <template v-for=\"(item, index) in option.columns\">\r\n <el-table-column\r\n v-if=\"item.fieldName != '' ? item.isShow : true\"\r\n :key=\"index\"\r\n :prop=\"item.fieldName\"\r\n :label=\"item.label\"\r\n :show-overflow-tooltip=\"\r\n item['show-overflow-tooltip'] === true ? true : false\r\n \"\r\n :min-width=\"item.width\"\r\n :fixed=\"item.fixed || false\"\r\n :align=\"item.align || 'left'\"\r\n :width=\"item.fieldName == '' ? item.width : ''\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <div v-if=\"item.fieldName == ''\">\r\n <template v-for=\"(btn, key) in item.data\">\r\n <el-button\r\n :key=\"key\"\r\n size=\"mini\"\r\n :disabled=\"buttonAuth(btn, scope.row)\"\r\n v-if=\"$hasPerm(btn.perm || true)\"\r\n @click=\"Fn(btn.type, scope.$index, scope.row)\"\r\n >{{ btn.label }}</el-button\r\n >\r\n </template>\r\n </div>\r\n <div v-else>\r\n <el-form-item\r\n :prop=\"item.fieldName + '_' + scope.$index\"\r\n v-show=\"editFlag[scope.$index] === true\"\r\n size=\"small\"\r\n style=\"margin-top: 20px\"\r\n >\r\n <template v-if=\"item.fieldType === 'text'\">\r\n <template v-if=\"item.dataType === 'money(yuan)'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @keyup.native=\"toMoney\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit'])\r\n ? false\r\n : item['show-word-limit']\r\n \"\r\n >\r\n <!-- <template slot=\"append\">元</template> -->\r\n <template slot=\"suffix\">元</template>\r\n </el-input>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit'])\r\n ? false\r\n : item['show-word-limit']\r\n \"\r\n >\r\n <template v-if=\"item.dataType === 'money(jiao)'\">\r\n <template slot=\"suffix\">角</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(分)'\">\r\n <template slot=\"suffix\">分</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(wan)'\">\r\n <template slot=\"suffix\">万元</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(yi)'\">\r\n <template slot=\"suffix\">亿元</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'percentile'\">\r\n <template slot=\"suffix\">%</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'thousand'\">\r\n <template slot=\"suffix\">‰</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'tenThousand'\">\r\n <template slot=\"suffix\">‱</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'password'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'checkbox'\">\r\n <el-checkbox-group\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n <el-checkbox\r\n v-for=\"boxItem in pramDicItem[item.fieldName]\"\r\n :key=\"boxItem.optCode\"\r\n :label=\"boxItem.optCode\"\r\n >\r\n {{ boxItem.optName }}</el-checkbox\r\n >\r\n </el-checkbox-group>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'select'\">\r\n <template v-if=\"item.dataType === 'library'\">\r\n <mftcc-library-select\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :url=\"item.library.url\"\r\n :realField=\"item.library.realField\"\r\n :showField=\"item.library.showField\"\r\n :multiple=\"false\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </mftcc-library-select>\r\n </template>\r\n <template v-else>\r\n <el-select\r\n autocomplete=\"off\"\r\n clearable\r\n filterable\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n <el-option\r\n v-for=\"selectItem in pramDicItem[item.fieldName]\"\r\n :key=\"selectItem.optCode\"\r\n :label=\"selectItem.optName\"\r\n :value=\"selectItem.optCode\"\r\n >\r\n </el-option>\r\n </el-select>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'multipleSelection'\">\r\n <template v-if=\"item.dataType === 'library'\">\r\n <mftcc-library-select\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :url=\"item.library.url\"\r\n :realField=\"item.library.realField\"\r\n :showField=\"item.library.showField\"\r\n :multiple=\"true\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </mftcc-library-select>\r\n </template>\r\n <template v-else>\r\n <el-select\r\n multiple\r\n autocomplete=\"off\"\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n <el-option\r\n v-for=\"selectItem in pramDicItem[item.fieldName]\"\r\n :key=\"selectItem.optCode\"\r\n :label=\"selectItem.optName\"\r\n :value=\"selectItem.optCode\"\r\n ></el-option>\r\n </el-select>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'radio'\">\r\n <el-radio-group\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n <el-radio\r\n v-for=\"radioItem in pramDicItem[item.fieldName]\"\r\n :key=\"radioItem.optCode\"\r\n :label=\"radioItem.optCode\"\r\n >\r\n {{ radioItem.optName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'switch'\">\r\n <el-switch\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :active-value=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].switchValue\r\n .activeValue\r\n )\r\n ? '1'\r\n : columns[item.fieldName + '_' + scope.$index].switchValue\r\n .activeValue\r\n \"\r\n :inactive-value=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].switchValue\r\n .inActiveValue\r\n )\r\n ? '0'\r\n : columns[item.fieldName + '_' + scope.$index].switchValue\r\n .inActiveValue\r\n \"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n @change=\"changeFunc(item, $event, scope.$index, scope.row)\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n ></el-switch>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'date'\">\r\n <el-date-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :format=\"\r\n formData[item.fieldName + '_' + scope.$index] ===\r\n dateFormat(\r\n new Date('9999/12/31'),\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? 'yyyyMMdd'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? '长期'\r\n : isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .format\r\n )\r\n ? 'yyyy-MM-dd'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .format\r\n \"\r\n :value-format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? 'yyyyMMdd'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n \"\r\n type=\"date\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n :picker-options=\"\r\n !isEmpty(item.dateOption) && item.dateOption.isLong === true\r\n ? pickerOptions\r\n : {}\r\n \"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'time'\">\r\n <el-time-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat.format\r\n )\r\n ? 'HH:mm:ss'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .format\r\n \"\r\n :value-format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? 'HH:mm:ss'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n \"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n :picker-options=\"isEmpty(item.dateOption) ? {} : item.dateOption\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-time-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'datetime'\">\r\n <el-date-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat.format\r\n )\r\n ? 'yyyy-MM-dd HH:mm:ss'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .format\r\n \"\r\n :value-format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? 'yyyyMMdd HH:mm:ss'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n \"\r\n type=\"datetime\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'number'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"number\"\r\n v-model.number=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'textarea'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"textarea\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit'])\r\n ? true\r\n : item['show-word-limit']\r\n \"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'query'\">\r\n <span>{{ tableFormatter(scope.row[item.fieldName], item) }}</span>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n ></el-input>\r\n </template>\r\n </el-form-item>\r\n\r\n <template v-if=\"item.fieldType === 'switch'\">\r\n <el-switch\r\n v-show=\"editFlag[scope.$index] === false\"\r\n :ref=\"item.fieldName + '_query'\"\r\n v-model=\"scope.row[item.fieldName]\"\r\n :active-value=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].switchValue\r\n .activeValue\r\n )\r\n ? 0\r\n : columns[item.fieldName + '_' + scope.$index].switchValue\r\n .activeValue\r\n \"\r\n :inactive-value=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].switchValue\r\n .inActiveValue\r\n )\r\n ? 1\r\n : columns[item.fieldName + '_' + scope.$index].switchValue\r\n .inActiveValue\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n @change=\"changeFunc(item, $event, scope.$index, scope.row)\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n ></el-switch>\r\n </template>\r\n <template v-else>\r\n <span v-show=\"editFlag[scope.$index] === false\">{{\r\n tableFormatter(scope.row[item.fieldName], item)\r\n }}</span>\r\n </template>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </template>\r\n </el-table>\r\n </el-form>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { findByList, getParameter } from \"../axios\";\r\nimport formUtil from \"../utils/formUtil\";\r\nexport default {\r\n data() {\r\n return {\r\n option: {},\r\n searchData: {},\r\n maxHeight: null,\r\n height: null,\r\n currentRow: null,\r\n isEmpty: formUtil.isEmpty,\r\n toMoney: formUtil.toMoney,\r\n dateFormat: formUtil.dateFormat,\r\n\r\n addFlag: {},\r\n editFlag: {},\r\n formData: {},\r\n formRules: {},\r\n rules: {},\r\n events: {},\r\n pramDicItem: {},\r\n columns: {},\r\n pickerOptions: {\r\n shortcuts: [\r\n {\r\n text: \"今天\",\r\n onClick(picker) {\r\n picker.$emit(\"pick\", new Date());\r\n },\r\n },\r\n {\r\n text: \"长期\",\r\n onClick(picker) {\r\n picker.$emit(\"pick\", new Date(\"9999/12/31\"));\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n },\r\n props: [\"tableId\", \"initData\", \"initSearchData\", \"parentVm\"],\r\n watch: {\r\n tableId: {\r\n handler(val, oldVal) {\r\n this.initTable(() => {\r\n this.$emit(\"callback\");\r\n });\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n formRules: {\r\n handler(val, oldVal) {\r\n let _this = this;\r\n let dataList = _this.option.tableData;\r\n let columns = _this.option.columns;\r\n _this.rules = {};\r\n for (let i in dataList) {\r\n for (let j in columns) {\r\n if (columns[j].fieldName !== \"\") {\r\n _this.$set(\r\n _this.rules,\r\n columns[j].fieldName + \"_\" + i,\r\n val[columns[j].fieldName]\r\n );\r\n }\r\n }\r\n }\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n option: {\r\n handler(val, oldVal) {\r\n let _this = this;\r\n let dataList = val.tableData;\r\n let columns = val.columns;\r\n _this.columns = {};\r\n for (let i in dataList) {\r\n for (let j in columns) {\r\n if (columns[j].fieldName !== \"\") {\r\n let newColumns = Object.assign({}, columns[j]);\r\n _this.$set(_this.columns, columns[j].fieldName + \"_\" + i, newColumns);\r\n }\r\n }\r\n }\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n },\r\n mounted() {\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n },\r\n methods: {\r\n rowStyle(obj) {\r\n let event = this.option[\"row-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n rowClassName(obj) {\r\n obj.row._$index = obj.rowIndex;\r\n let event = this.option[\"row-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n cellStyle(obj) {\r\n let event = this.option[\"cell-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n cellClassName(obj) {\r\n let event = this.option[\"cell-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n buttonAuth(btn, row) {\r\n let buttonAuth = false;\r\n let auth = btn.auth || \"\";\r\n let authArray = auth.split(\";\");\r\n for (let i in authArray) {\r\n if (!this.isEmpty(authArray[i])) {\r\n let authObj = authArray[i].split(\"-\");\r\n if (authObj.length === 2) {\r\n if (this.$store.getters.buttonAuth[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n } else if (row[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n }\r\n }\r\n }\r\n }\r\n return buttonAuth;\r\n },\r\n blurFunc(dataType, el) {\r\n formUtil.func_uior_valTypeImm(el, dataType);\r\n },\r\n tableFormatter(cellValue, item) {\r\n let _this = this;\r\n let value = \"\";\r\n if (_this.isEmpty(cellValue)) {\r\n return cellValue;\r\n } else {\r\n value = cellValue;\r\n }\r\n let parmArray = _this.pramDicItem[item.fieldName];\r\n if (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\") {\r\n let checkBoxValue = \"\";\r\n let checkArray = cellValue.split(\"|\");\r\n for (let h in checkArray) {\r\n if (!_this.isEmpty(checkArray[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === checkArray[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (item.fieldType === \"text\") {\r\n if (item.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(cellValue);\r\n } else if (item.dataType === \"percentile\") {\r\n value = formUtil.numMulti(cellValue, 100);\r\n } else if (item.dataType === \"thousand\") {\r\n value = formUtil.numMulti(cellValue, 1000);\r\n } else if (item.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(cellValue, 10000);\r\n }\r\n } else if (item.fieldType === \"date\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd\";\r\n let format = \"yyyy-MM-dd\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else if (item.fieldType === \"datetime\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n let format = \"yyyy-MM-dd HH:mm:ss\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === cellValue) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n if (\r\n !_this.isEmpty(item.formatter) &&\r\n formUtil.parentVmExist(this, item.formatter)\r\n ) {\r\n value = this.parentVm._self[item.formatter](value);\r\n } else if (!_this.isEmpty(item.desensitization)) {\r\n value = formUtil.desensitization(value, item.desensitization);\r\n }\r\n return value;\r\n },\r\n clickFunc(item, el, index) {\r\n let events = item.events;\r\n for (let i in events) {\r\n if (\r\n item.disabled !== true &&\r\n item.readOnly !== true &&\r\n events[i].type === \"click\" &&\r\n formUtil.parentVmExist(this, events[i].callback)\r\n ) {\r\n this.parentVm._self[events[i].callback](el, index);\r\n }\r\n }\r\n },\r\n changeFunc(item, el, index, row) {\r\n let events = item.events;\r\n for (let i in events) {\r\n if (\r\n item.disabled !== true &&\r\n item.readOnly !== true &&\r\n events[i].type === \"change\" &&\r\n formUtil.parentVmExist(this, events[i].callback)\r\n ) {\r\n this.parentVm._self[events[i].callback](el, index, row);\r\n }\r\n }\r\n },\r\n addData() {\r\n let _this = this;\r\n let columns = _this.option.columns;\r\n let newObj = {};\r\n for (let j in columns) {\r\n if (columns[j].fieldName !== \"\") {\r\n newObj[columns[j].fieldName] = \"\";\r\n }\r\n }\r\n if (arguments.length >= 0) {\r\n for (let i in arguments[0]) {\r\n newObj[i] = arguments[0][i];\r\n }\r\n }\r\n _this.option.tableData.push(newObj);\r\n _this.$set(_this.addFlag, _this.option.tableData.length - 1, true);\r\n _this.editTable(_this.option.tableData.length - 1, true);\r\n _this.$nextTick(() => {\r\n _this.$refs[_this.option.tableId].bodyWrapper.scrollTop =\r\n _this.$refs[_this.option.tableId].bodyWrapper.scrollHeight;\r\n });\r\n },\r\n editTable() {\r\n let _this = this;\r\n let tableData = _this.option.tableData;\r\n let columns = _this.option.columns;\r\n _this.rules = {};\r\n let formCoyeData = JSON.parse(JSON.stringify(this.formData)); //深度copy\r\n _this.formData = {};\r\n for (let i = tableData.length - 1; i >= 0; i--) {\r\n if (arguments.length === 0) {\r\n this.editTable(i, !_this.editFlag[i]);\r\n } else if (arguments.length === 1) {\r\n this.editTable(i, arguments[0]);\r\n } else if (arguments.length === 2) {\r\n if (arguments[0] == i) {\r\n _this.$set(_this.editFlag, arguments[0], arguments[1]);\r\n for (let j in columns) {\r\n if (columns[j].fieldName !== \"\") {\r\n _this.$set(\r\n _this.rules,\r\n columns[j].fieldName + \"_\" + i,\r\n _this.formRules[columns[j].fieldName]\r\n );\r\n let newColumns = Object.assign({}, columns[j]);\r\n _this.$set(_this.columns, columns[j].fieldName + \"_\" + i, newColumns);\r\n }\r\n }\r\n }\r\n } else if (arguments.length >= 3) {\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let j in value) {\r\n if (tableData[i][arguments[0]] == value[j]) {\r\n this.editTable(i, arguments[2]);\r\n }\r\n }\r\n }\r\n _this.setFormValue(i, tableData[i]);\r\n if (_this.editFlag[i] === false) {\r\n if (_this.addFlag[i] === true) {\r\n for (let j = 0; j < tableData.length - i; j++) {\r\n _this.$set(_this.addFlag, i + j, _this.addFlag[i + j + 1]);\r\n _this.$set(_this.editFlag, i + j, _this.editFlag[i + j + 1]);\r\n\r\n for (let k in columns) {\r\n if (columns[k].fieldName !== \"\") {\r\n formCoyeData[columns[k].fieldName + \"_\" + (i + j)] =\r\n formCoyeData[columns[k].fieldName + \"_\" + (i + j + 1)];\r\n let formItemData =\r\n formCoyeData[columns[k].fieldName + \"_\" + (i + j + 1)];\r\n if (!_this.isEmpty(formItemData)) {\r\n let formTextValue = this.getFormValueFormatter(\r\n columns[k],\r\n formItemData\r\n ).value;\r\n _this.setFormValue(i + j, columns[k].fieldName, formTextValue);\r\n } else {\r\n _this.setFormValue(i + j, columns[k].fieldName, \"\");\r\n }\r\n }\r\n }\r\n }\r\n tableData.splice(i, 1);\r\n }\r\n } else {\r\n for (let k in columns) {\r\n if (columns[k].fieldName !== \"\") {\r\n _this.$nextTick(() => {\r\n if (_this.addFlag[i] === true) {\r\n _this.$set(\r\n _this.columns[columns[k].fieldName + \"_\" + i],\r\n \"readOnly\",\r\n false\r\n );\r\n _this.$set(\r\n _this.columns[columns[k].fieldName + \"_\" + i],\r\n \"disabled\",\r\n false\r\n );\r\n }\r\n let formItemData = formCoyeData[columns[k].fieldName + \"_\" + i];\r\n if (!_this.isEmpty(formItemData)) {\r\n let formTextValue = this.getFormValueFormatter(columns[k], formItemData)\r\n .value;\r\n _this.setFormValue(i, columns[k].fieldName, formTextValue);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n },\r\n getFormValueFormatter(item, formItemData) {\r\n let formTextValue = formItemData;\r\n let checkFlag = false;\r\n if (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\") {\r\n formTextValue = formItemData.join(\"|\");\r\n checkFlag = true;\r\n } else if (item.fieldType === \"text\") {\r\n if (item.dataType === \"money(yuan)\") {\r\n formTextValue = formUtil.delcommafy(formItemData);\r\n } else if (item.dataType === \"percentile\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 100);\r\n } else if (item.dataType === \"thousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 1000);\r\n } else if (item.dataType === \"tenThousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 10000);\r\n }\r\n }\r\n let result = {\r\n value: formTextValue,\r\n checkFlag: checkFlag,\r\n };\r\n return result;\r\n },\r\n validateForm(callback) {\r\n this.$refs[this.option.formId].validate((valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n clearValidateForm(props) {\r\n this.$nextTick(() => {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.formId].clearValidate();\r\n } else if (arguments.length >= 1) {\r\n this.$refs[this.option.formId].clearValidate(props);\r\n }\r\n });\r\n },\r\n setFormValue() {\r\n let formItem = this.option.columns;\r\n if (arguments.length === 1) {\r\n for (let i in arguments[0]) {\r\n for (let k in arguments[0][i]) {\r\n this.setFormValue(i, k, arguments[0][i][k]);\r\n }\r\n }\r\n } else if (arguments.length == 2) {\r\n for (let k in arguments[1]) {\r\n this.setFormValue(arguments[0], k, arguments[1][k]);\r\n }\r\n } else if (arguments.length >= 3) {\r\n this.$set(this.formData, arguments[1] + \"_\" + arguments[0], arguments[2]);\r\n for (let j in formItem) {\r\n if (arguments[1] === formItem[j].fieldName) {\r\n if (\r\n formItem[j].fieldType === \"checkbox\" ||\r\n formItem[j].fieldType === \"multipleSelection\"\r\n ) {\r\n let checkBoxArray = [];\r\n let checkArray = arguments[2].split(\"|\");\r\n for (let h in checkArray) {\r\n if (!this.isEmpty(checkArray[h])) {\r\n checkBoxArray.push(checkArray[h]);\r\n }\r\n }\r\n this.$set(this.formData, arguments[1] + \"_\" + arguments[0], checkBoxArray);\r\n } else if (formItem[j].fieldType === \"text\") {\r\n let formTextValue = arguments[2];\r\n if (formItem[j].dataType === \"money(yuan)\") {\r\n formTextValue = formUtil.formatMoney(formTextValue);\r\n } else if (formItem[j].dataType === \"percentile\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 100);\r\n } else if (formItem[j].dataType === \"thousand\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 1000);\r\n } else if (formItem[j].dataType === \"tenThousand\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 10000);\r\n }\r\n this.$set(this.formData, arguments[1] + \"_\" + arguments[0], formTextValue);\r\n } else {\r\n this.$set(this.formData, arguments[1] + \"_\" + arguments[0], arguments[2]);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n getFormValue() {\r\n let _this = this;\r\n let formItem = this.option.columns;\r\n let data = JSON.parse(JSON.stringify(this.formData)); //深度copy\r\n if (arguments.length === 0) {\r\n let allData = [];\r\n let editData = [];\r\n let dataList = _this.option.tableData;\r\n for (let i in dataList) {\r\n if (_this.editFlag[i] === true) {\r\n let resultObj = _this.getFormValue(i);\r\n if (resultObj.isEdit === true) {\r\n editData.push(resultObj.data);\r\n }\r\n allData.push(resultObj.data);\r\n }\r\n }\r\n let result = {\r\n allData: allData,\r\n editData: editData,\r\n };\r\n return result;\r\n } else if (arguments.length == 1) {\r\n let dataList = _this.option.tableData;\r\n let dataObj = {};\r\n let isEdit = false;\r\n if (_this.editFlag[arguments[0]] === true) {\r\n for (let j in dataList[arguments[0]]) {\r\n dataObj[j] = data[j + \"_\" + arguments[0]];\r\n var checkFlag = false;\r\n for (let k in formItem) {\r\n if (j === formItem[k].fieldName) {\r\n let formText = this.getFormValueFormatter(\r\n formItem[k],\r\n data[j + \"_\" + arguments[0]]\r\n );\r\n dataObj[j] = formText.value;\r\n checkFlag = formText.checkFlag;\r\n }\r\n }\r\n let tableValue = dataList[arguments[0]][j];\r\n if (checkFlag) {\r\n dataObj[j] =\r\n dataObj[j].substring(dataObj[j].length - 1) == \"|\"\r\n ? dataObj[j].substring(0, dataObj[j].length - 1)\r\n : dataObj[j];\r\n tableValue =\r\n tableValue.substring(tableValue.length - 1) == \"|\"\r\n ? tableValue.substring(0, tableValue.length - 1)\r\n : tableValue;\r\n }\r\n if (dataObj[j] != tableValue) {\r\n isEdit = true;\r\n }\r\n }\r\n }\r\n let result = {\r\n isEdit: isEdit,\r\n data: dataObj,\r\n };\r\n return result;\r\n } else if (arguments.length >= 2) {\r\n let dataList = _this.option.tableData;\r\n let result = \"\";\r\n if (_this.editFlag[arguments[0]] === true) {\r\n let dataObj = _this.getFormValue(arguments[0]);\r\n if (!this.isEmpty(dataObj)) {\r\n result = dataObj.data[arguments[1]];\r\n }\r\n }\r\n return result;\r\n }\r\n },\r\n attrForm() {\r\n let formItem = this.option.columns;\r\n if (arguments.length === 2) {\r\n let value = \"\";\r\n for (let i in formItem) {\r\n if (formItem[i].fieldName === arguments[0]) {\r\n if (arguments[1] === \"dicItem\") {\r\n value = this.pramDicItem[arguments[0]];\r\n } else if (arguments[1] === \"events\") {\r\n value = this.events[arguments[0]];\r\n break;\r\n } else if (arguments[1] === \"rules\") {\r\n value = this.formRules[arguments[0]];\r\n break;\r\n } else {\r\n value = formItem[i][arguments[1]];\r\n break;\r\n }\r\n }\r\n }\r\n return value;\r\n } else if (arguments.length >= 3) {\r\n for (let i in formItem) {\r\n if (formItem[i].fieldName === arguments[0]) {\r\n if (arguments[1] === \"dicItem\") {\r\n this.$set(this.pramDicItem, arguments[0], arguments[2]);\r\n break;\r\n } else if (arguments[1] === \"events\") {\r\n //解析事件\r\n try {\r\n let eventsArray = arguments[2];\r\n let event = {};\r\n for (let evetIndex in eventsArray) {\r\n if (\r\n !this.isEmpty(eventsArray[evetIndex].type) &&\r\n eventsArray[evetIndex].type !== \"click\" &&\r\n formUtil.parentVmExist(this, eventsArray[evetIndex].callback)\r\n ) {\r\n event[eventsArray[evetIndex].type] = this.parentVm._self[\r\n eventsArray[evetIndex].callback\r\n ];\r\n }\r\n }\r\n this.$set(this.events, formItem[i].fieldName, event);\r\n } catch (error) {\r\n console.error(\"事件解析错误:\" + error);\r\n this.$set(this.events, formItem[i].fieldName, {});\r\n }\r\n break;\r\n } else if (arguments[1] === \"rules\") {\r\n //解析规则\r\n try {\r\n //解析规则\r\n let formRules = arguments[2];\r\n let fieldNameRules = [];\r\n if (formItem[i].fieldType === \"text\") {\r\n let type = formItem[i].dataType;\r\n if (type === \"int\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateInt;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"long\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateLong;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (\r\n type == \"double(2)\" ||\r\n type == \"double(4)\" ||\r\n type == \"double(6)\" ||\r\n type == \"money(fen)\" ||\r\n type == \"money(jiao)\" ||\r\n type == \"money(wan)\" ||\r\n type == \"money(yi)\" ||\r\n type == \"percentile\" ||\r\n type === \"thousand\" ||\r\n type == \"tenThousand\"\r\n ) {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateNumber;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"float\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateFloat;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"boolean\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateBoolean;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type === \"money(yuan)\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateMoney;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n }\r\n\r\n for (let k in formRules) {\r\n let fieldNameRule = {};\r\n let trigger = \"blur\";\r\n let message = \"\";\r\n let type = \"\";\r\n if (formRules[k].type === \"required\") {\r\n fieldNameRule[\"required\"] = true;\r\n trigger = \"blur\";\r\n message = formItem[i].label + \"不能为空\";\r\n } else if (formRules[k].type === \"validator\") {\r\n if (formUtil.parentVmExist(this, eformRules[k].validator)) {\r\n fieldNameRule[\"validator\"] = this.parentVm._self[\r\n eformRules[k].validator\r\n ];\r\n }\r\n trigger = \"blur\";\r\n } else if (formRules[k].type === \"number\") {\r\n trigger = \"blur\";\r\n message = formItem[i].label + \"必须为数字\";\r\n type = \"number\";\r\n } else if (formRules[k].type === \"email\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的邮箱\";\r\n type = \"email\";\r\n } else if (formRules[k].type === \"phone\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的手机号码\";\r\n fieldNameRule[\"pattern\"] = /^1[123456789]\\d{9}$/;\r\n } else if (formRules[k].type === \"mobile\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的电话号码\";\r\n fieldNameRule[\"pattern\"] = /^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$/;\r\n } else if (formRules[k].type === \"idNo\") {\r\n trigger = \"blur\";\r\n fieldNameRule[\"validator\"] = formUtil.validateIdNo;\r\n } else {\r\n //continue\r\n }\r\n\r\n if (\r\n formItem[i].fieldType === \"checkbox\" ||\r\n formItem[i].fieldType === \"multipleSelection\"\r\n ) {\r\n type = \"array\";\r\n }\r\n\r\n if (\r\n !this.isEmpty(formRules[k].min) &&\r\n !this.isEmpty(formRules[k].max)\r\n ) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message =\r\n formItem[i].label +\r\n \"长度必须大于等于\" +\r\n formRules[k].min +\r\n \"并且小于等于\" +\r\n formRules[k].max;\r\n } else if (!this.isEmpty(formRules[k].min)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n message = formItem[i].label + \"长度必须大于等于\" + formRules[k].min;\r\n } else if (!this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message = formItem[i].label + \"长度必须小于等于\" + formRules[k].max;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].message)) {\r\n message = formRules[k].message;\r\n }\r\n fieldNameRule[\"message\"] = message;\r\n\r\n if (!this.isEmpty(type)) {\r\n fieldNameRule[\"type\"] = type;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].trigger)) {\r\n trigger = formRules[k].trigger;\r\n }\r\n fieldNameRule[\"trigger\"] = trigger;\r\n\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n this.$set(this.formRules, formItem[i].fieldName, fieldNameRules);\r\n } catch (error) {\r\n console.error(\"规则解析错误:\" + error);\r\n this.$set(this.formRules, formItem[i].fieldName, []);\r\n }\r\n break;\r\n } else {\r\n formItem[i][arguments[1]] = arguments[2];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n Fn(method, index, row) {\r\n if (formUtil.parentVmExist(this, method)) {\r\n this.parentVm._self[method](index, row);\r\n }\r\n },\r\n tableResize() {\r\n if (!this.option.height || this.option.height == \"auto\") {\r\n if (this.option.maxHeight) {\r\n this.maxHeight = this.option.maxHeight;\r\n } else {\r\n this.maxHeight = this.$refs.mftccEditTable.offsetHeight;\r\n }\r\n this.option.maxHeight = this.maxHeight;\r\n if (this.option.isPagination === true) {\r\n if ((this.maxHeight + \"\").endsWith(\"px\")) {\r\n this.maxHeight =\r\n Number(this.maxHeight.substring(0, this.maxHeight.length - 2)) - 40;\r\n } else {\r\n this.maxHeight = Number(this.maxHeight) - 40;\r\n }\r\n }\r\n if (this.maxHeight <= 0) {\r\n this.maxHeight = null;\r\n }\r\n } else {\r\n this.height = this.option.height;\r\n }\r\n },\r\n getTableData(callback) {\r\n var _this = this;\r\n _this.searchData = _this.searchData || {};\r\n _this.option.tableData = [];\r\n findByList(\r\n _this.option.url,\r\n _this.searchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n let dataList = res.list;\r\n for (let i in dataList) {\r\n _this.$set(_this.editFlag, i, false);\r\n _this.$set(_this.addFlag, i, false);\r\n }\r\n _this.option.tableData = dataList;\r\n }\r\n _this.option.loading = false;\r\n _this.$nextTick(() => {\r\n _this.initForm();\r\n _this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n },\r\n (error) => {\r\n _this.option.loading = false;\r\n _this.$nextTick(() => {\r\n _this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n }\r\n );\r\n },\r\n refresh() {\r\n this.getTableData();\r\n },\r\n search(searchData) {\r\n this.pageNo = 1;\r\n this.pageSize = 10;\r\n this.pageTotal = 0;\r\n this.currentRow = null;\r\n this.searchData = this.initSearchData || {};\r\n if (!this.isEmpty(searchData)) {\r\n for (let i in searchData) {\r\n this.searchData[i] = searchData[i];\r\n }\r\n }\r\n this.getTableData();\r\n },\r\n checkChange(col) {\r\n console.log(col);\r\n },\r\n setSelectValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].clearSelection();\r\n } else if (arguments.length === 1) {\r\n this.setSelectValue(this.option.selectKey, arguments[0]);\r\n } else if (arguments.length === 2) {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(tableDatas[i]);\r\n }\r\n }\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(\r\n tableDatas[i],\r\n arguments[2]\r\n );\r\n }\r\n }\r\n }\r\n },\r\n getSelectValue() {\r\n let parmKeyArray = this.$refs[this.option.tableId].store.states.selection;\r\n return parmKeyArray;\r\n },\r\n setCurrentValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].setCurrentRow();\r\n } else if (arguments.length === 1) {\r\n this.setCurrentValue(this.option.selectKey, arguments[0]);\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n tableDatas[i][selectKey] === arguments[1]\r\n ) {\r\n this.$refs[this.option.tableId].setCurrentRow(tableDatas[i]);\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n getCurrentValue() {\r\n return this.currentRow;\r\n },\r\n currentChange(currentRow, oldCurrentRow) {\r\n this.currentRow = currentRow;\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n rowClick(row, column, event) {\r\n if (!this.editFlag[row._$index]) {\r\n this.$emit(\"row-click\", row, column, event);\r\n }\r\n },\r\n rowDblclick(row, column, event) {\r\n if (!this.editFlag[row._$index]) {\r\n this.$emit(\"row-dblclick\", row, column, event);\r\n }\r\n },\r\n initForm() {\r\n let dataList = this.option.tableData;\r\n for (let i in dataList) {\r\n this.setFormValue(i, dataList[i]);\r\n }\r\n },\r\n async initTable(callback) {\r\n let _this = this;\r\n _this.option = {};\r\n _this.searchData = _this.initSearchData || {};\r\n _this.maxHeight = null;\r\n _this.height = null;\r\n _this.currentRow = null;\r\n let tableData;\r\n try {\r\n if (this.tableId) {\r\n let jsonData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/table/\" + this.tableId + \".json\"\r\n );\r\n tableData = jsonData.data;\r\n }\r\n } catch (error) {\r\n _this.$message.error(\r\n \"未找到 [ \" + this.tableId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n _this.option = JSON.parse(JSON.stringify(tableData));\r\n if (_this.initData !== undefined) {\r\n for (let i in _this.initData) {\r\n _this.option[i] = _this.initData[i];\r\n }\r\n }\r\n\r\n let formItem = _this.option.columns;\r\n let dicKeyArray = [];\r\n for (let i in formItem) {\r\n if (formItem[i].fieldName !== \"\") {\r\n //解析字典项\r\n let dicKey = formItem[i].dicKey;\r\n if (!_this.isEmpty(dicKey) && formItem[i].optionType !== \"1\") {\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = formItem[i].fieldName;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n _this.$set(_this.pramDicItem, formItem[i].fieldName, formItem[i].dicItem);\r\n }\r\n\r\n //解析事件\r\n _this.attrForm(formItem[i].fieldName, \"events\", formItem[i].events);\r\n\r\n //解析规则\r\n _this.attrForm(formItem[i].fieldName, \"rules\", formItem[i].rules);\r\n\r\n //获取库中选择字典\r\n if (\r\n (formItem[i].fieldType === \"select\" ||\r\n formItem[i].fieldType === \"multipleSelection\") &&\r\n formItem[i].dataType === \"library\"\r\n ) {\r\n getParameter(\r\n formItem[i].library.url,\r\n { query: \"\" },\r\n true,\r\n function (reponse) {\r\n if (reponse.code === 0) {\r\n let parmArray = [];\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (!_this.isEmpty(formItem[i].library.realField)) {\r\n realField = formItem[i].library.realField;\r\n }\r\n if (!_this.isEmpty(formItem[i].library.showField)) {\r\n showField = formItem[i].library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n optCode: list[i][realField],\r\n optName: list[i][showField],\r\n };\r\n parmArray.push(option);\r\n }\r\n _this.$set(_this.pramDicItem, formItem[i].fieldName, parmArray);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n }\r\n });\r\n\r\n let url = _this.option.url;\r\n if (url !== undefined && url !== null && url !== \"\") {\r\n _this.getTableData(callback);\r\n } else {\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n _this.initForm();\r\n callback();\r\n });\r\n }\r\n }\r\n // _this.$nextTick(() => {\r\n // _this.tableResize();\r\n // })\r\n },\r\n },\r\n};\r\n</script>\r\n<style scoped>\r\n.mftcc-edit-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n.mftcc-edit-table .el-dropdown-DColumn {\r\n position: absolute;\r\n z-index: 1;\r\n top: 8px;\r\n right: 8px;\r\n}\r\n.mftcc-edit-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-edit-table .mftcc-edit-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-edit-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-edit-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n.mftcc-edit-table .el-dropdown-DColumn {\r\n position: absolute;\r\n z-index: 1;\r\n top: 8px;\r\n right: 8px;\r\n}\r\n.mftcc-edit-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-edit-table .mftcc-edit-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-edit-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n","<template>\r\n <div class=\"mftcc-definitidon-search\">\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <div class=\"custom-search\">\r\n <el-menu :default-active=\"filterMenuactiveIndex\" mode=\"horizontal\">\r\n <el-menu-item v-for=\"(menu, index) in filterMenu || []\" :key=\"index\" :index=\"index.toString()\" @click=\"menuSearch(menu.query)\">{{ menu.label }}</el-menu-item>\r\n </el-menu>\r\n <el-button type=\"text\" icon=\"el-icon-circle-plus-outline\" class=\"definitidon-button\" @click=\"searchShow = !searchShow\" v-if=\"filterDic.show === true\">定义筛选</el-button>\r\n </div>\r\n </el-col>\r\n <el-col :span=\"8\" class=\"search-col\">\r\n <div class=\"dynamic-search\">\r\n <el-input\r\n :placeholder=\"searchPlaceholder || '请输入查询条件'\"\r\n suffix-icon=\"el-icon-search\"\r\n v-model=\"searchData\"\r\n class=\"dynamic-input\"\r\n @input=\"search()\">\r\n </el-input>\r\n <el-button v-for=\"(filterButtonItem, index) in filterButton || []\" :key=\"index\" :icon=\"filterButtonItem.icon\" @click=\"buttonEvent(filterButtonItem.event)\">{{ filterButtonItem.label }}</el-button>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-collapse-transition>\r\n <div v-if=\"searchShow\">\r\n <div class=\"dynamic-edit-filter\">\r\n <span>已保存的历史检索</span>\r\n <el-tabs v-model=\"editableFilter\" type=\"card\" closable @tab-remove=\"removeFilter\" @tab-click=\"clickFilter\">\r\n <el-tab-pane\r\n v-for=\"filter in filters\"\r\n :key=\"filter.filterNo\"\r\n :label=\"filter.filterName\"\r\n :name=\"filter.filterNo\"\r\n >\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n <el-form :model=\"definitidonForm\" ref=\"definitidonForm\" @submit.native.prevent>\r\n <el-form-item\r\n v-for=\"(definitidon, index) in definitidonForm.definitidon\"\r\n :key=\"index\">\r\n <el-col :span=\"3\">\r\n <template v-if=\"index == 0\">\r\n 请选择:\r\n </template>\r\n <template v-else>\r\n <el-form-item :prop=\"'definitidon.' + index + '.andOr'\">\r\n <el-radio-group v-model=\"definitidon.andOr\">\r\n <el-radio-button label=\"0\">并且</el-radio-button>\r\n <el-radio-button label=\"1\">或者</el-radio-button>\r\n </el-radio-group>\r\n </el-form-item>\r\n </template>\r\n </el-col>\r\n <el-col :span=\"5\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.fieldName'\"\r\n :rules=\"[\r\n { required: true, message: '字段不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select \r\n v-model=\"definitidon.fieldName\" \r\n clearable \r\n placeholder=\"请选择\"\r\n @change=\"fieldChange(index)\">\r\n <el-option\r\n v-for=\"item in filterDic.filter\"\r\n :key=\"item.fieldName\"\r\n :label=\"item.label\"\r\n :value=\"item.fieldName\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"5\">\r\n <template v-if=\"getFilterDic(index).dicType !== ''\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.dicType'\"\r\n :rules=\"[\r\n { required: true, message: '条件不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select v-model=\"definitidon.dicType\" clearable placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"item in dicType[getFilterDic(index).dicType]\"\r\n :key=\"item.optCode\"\r\n :label=\"item.optName\"\r\n :value=\"item.optCode\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </template>\r\n </el-col>\r\n <template v-if=\"getFilterDic(index).dicType === 'select'\">\r\n <template v-if=\"definitidonForm.definitidon[index].dicType === '3' || definitidonForm.definitidon[index].dicType === '4'\">\r\n <el-col :span=\"4\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select v-model=\"definitidon.value\" clearable placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"item in getFilterDic(index).dicItem\"\r\n :key=\"item.optCode\"\r\n :label=\"item.optName\"\r\n :value=\"item.optCode\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col class=\"line\" :span=\"1\">-</el-col>\r\n <el-col :span=\"4\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.secondValue'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select v-model=\"definitidon.secondValue\" clearable placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"item in getFilterDic(index).dicItem\"\r\n :key=\"item.optCode\"\r\n :label=\"item.optName\"\r\n :value=\"item.optCode\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n <template v-else-if=\"definitidonForm.definitidon[index].dicType !== ''\">\r\n <el-col :span=\"9\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select v-model=\"definitidon.value\" clearable placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"item in getFilterDic(index).dicItem\"\r\n :key=\"item.optCode\"\r\n :label=\"item.optName\"\r\n :value=\"item.optCode\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </template>\r\n <template v-else-if=\"getFilterDic(index).dicType === 'number'\">\r\n <template v-if=\"definitidonForm.definitidon[index].dicType === '3' || definitidonForm.definitidon[index].dicType === '4'\">\r\n <el-col :span=\"4\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"number\" v-model.number=\"definitidon.value\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col class=\"line\" :span=\"1\">-</el-col>\r\n <el-col :span=\"4\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.secondValue'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"number\" v-model.number=\"definitidon.secondValue\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n <template v-else-if=\"definitidonForm.definitidon[index].dicType !== ''\">\r\n <el-col :span=\"9\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"number\" v-model.number=\"definitidon.value\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </template>\r\n <template v-else-if=\"getFilterDic(index).dicType === 'text'\">\r\n <template v-if=\"definitidonForm.definitidon[index].dicType === '3' || definitidonForm.definitidon[index].dicType === '4'\">\r\n <el-col :span=\"4\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"text\" v-model=\"definitidon.value\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col class=\"line\" :span=\"1\">-</el-col>\r\n <el-col :span=\"4\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.secondValue'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"text\" v-model=\"definitidon.secondValue\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n <template v-else-if=\"definitidonForm.definitidon[index].dicType !== ''\">\r\n <el-col :span=\"9\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"text\" v-model=\"definitidon.value\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </template>\r\n <template v-else-if=\"getFilterDic(index).dicType === 'date'\">\r\n <template v-if=\"definitidonForm.definitidon[index].dicType === '3' || definitidonForm.definitidon[index].dicType === '4'\">\r\n <el-col :span=\"9\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-date-picker \r\n v-model=\"definitidon.value\"\r\n type=\"daterange\"\r\n range-separator=\"至\"\r\n format=\"yyyy-MM-dd\"\r\n value-format=\"yyyyMMdd\"\r\n placeholder=\"请选择\">\r\n </el-date-picker>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n <template v-else-if=\"definitidonForm.definitidon[index].dicType !== ''\">\r\n <el-col :span=\"9\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-date-picker \r\n v-model=\"definitidon.value\"\r\n format=\"yyyy-MM-dd\"\r\n value-format=\"yyyyMMdd\"\r\n type=\"date\"\r\n placeholder=\"请选择\">\r\n </el-date-picker>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </template>\r\n <el-col :span=\"2\">\r\n <el-button icon=\"el-icon-circle-plus-outline\" circle @click.prevent=\"addDefinitidon\" size=\"small\"></el-button>\r\n <template v-if=\"definitidonForm.definitidon.length !== 1\">\r\n <el-button icon=\"el-icon-circle-close\" circle @click.prevent=\"removeDefinitidon(index)\" size=\"small\"></el-button>\r\n </template>\r\n </el-col>\r\n </el-form-item>\r\n \r\n </el-form>\r\n <div class=\"mftcc-definitidon-btn\">\r\n <el-button type=\"primary\" @click=\"search()\">搜索</el-button>\r\n <el-button type=\"primary\" @click=\"submitFilter\">保存</el-button>\r\n <el-button type=\"primary\" @click=\"resetDefinitidon\">重置</el-button>\r\n </div>\r\n </div>\r\n \r\n </el-collapse-transition>\r\n </el-row>\r\n </div>\r\n</template>\r\n<script>\r\nimport {del,get,postJson,putJson} from '../axios'\r\n export default {\r\n props: [\"filterDic\",\"parentVm\",\"filterMenu\",\"filterButton\",\"searchPlaceholder\"],\r\n data() {\r\n return {\r\n defaultDefinitidon: {\r\n andOr: \"0\",\r\n fieldName: \"\",\r\n fieldType: \"\",\r\n dicType: \"\",\r\n value: \"\",\r\n secondValue: \"\"\r\n },\r\n definitidonForm:{\r\n definitidon: [\r\n {\r\n andOr: \"0\",\r\n fieldName: \"\",\r\n fieldType: \"\",\r\n dicType: \"\",\r\n value: \"\",\r\n secondValue: \"\"\r\n }\r\n ]\r\n },\r\n dicType: {\r\n \"select\": [\r\n {\"optName\": \"是\",\"optCode\": \"0\"},{\"optName\": \"不是\",\"optCode\": \"99\"}\r\n ],\r\n \"number\": [\r\n {\"optName\": \"等于\",\"optCode\": \"0\"},{\"optName\": \"大于\",\"optCode\": \"1\"},{\"optName\": \"小于\",\"optCode\": \"2\"},{\"optName\": \"在...之间\",\"optCode\": \"3\"},{\"optName\": \"不在...之间\",\"optCode\": \"4\"}\r\n ],\r\n \"text\": [\r\n {\"optName\": \"是\",\"optCode\": \"0\"}\r\n ],\r\n \"date\": [\r\n {\"optName\": \"等于\",\"optCode\": \"0\"},{\"optName\": \"大于\",\"optCode\": \"1\"},{\"optName\": \"小于\",\"optCode\": \"2\"},{\"optName\": \"在...之间\",\"optCode\": \"3\"},{\"optName\": \"不在...之间\",\"optCode\": \"4\"}\r\n ]\r\n },\r\n filters: [],\r\n editableFilter: 'default',\r\n clickTabFilter: 'default',\r\n searchShow: false,\r\n searchData: \"\",\r\n filterMenuactiveIndex: \"\"\r\n };\r\n },\r\n watch: {\r\n searchShow () {\r\n if(this.searchShow === true){\r\n this.init()\r\n }\r\n },\r\n filterMenu:{\r\n handler(val, oldVal) {\r\n for(let i = 0; i < val.length; i++){\r\n if(val[i].default === true){\r\n this.filterMenuactiveIndex = i.toString();\r\n }\r\n }\r\n },\r\n deep: true,\r\n immediate:true\r\n }\r\n },\r\n methods: {\r\n getSearchData(searchData){\r\n searchData.dynamicQuery = this.searchData\r\n if(this.searchShow === true){\r\n searchData.customQuery = JSON.stringify(this.definitidonForm.definitidon)\r\n }\r\n return searchData\r\n },\r\n buttonEvent(event){\r\n if(event !== undefined && event !== null && event !== \"\"){\r\n let searchData = this.getSearchData({})\r\n this.parentVm._self[event](searchData);\r\n }\r\n },\r\n //组件初始化方法\r\n init(){\r\n get(\"/mftcc-sys-server/sys/sysUserSearchFilter/findByVue/\"+this.parentVm.$options.name,null,true,res => {\r\n if(res.code === 0){\r\n let filterList = res.list;\r\n this.filters = filterList;\r\n this.editableFilter = 'default';\r\n this.clickTabFilter = 'default';\r\n let definitidonObj = JSON.parse(JSON.stringify(this.defaultDefinitidon))\r\n this.filters.unshift(\r\n {\r\n filterNo:'default',\r\n filterName:\"新增\",\r\n filterContent: JSON.stringify([definitidonObj])\r\n }\r\n );\r\n this.resetDefinitidon();\r\n }else{\r\n this.$alert(res.msg,this.$alertTitle,{\r\n type: res.msgType,\r\n dangerouslyUseHTMLString:true,\r\n callback: action => {\r\n this.searchShow = false\r\n }\r\n });\r\n }\r\n },error =>{\r\n this.searchShow = false\r\n });\r\n },\r\n //根据索引获取当前筛选配置\r\n getFilterDic(index){\r\n let result = {\r\n dicItem: [],\r\n dicType: ''\r\n }\r\n for(let filterDic of this.filterDic.filter){\r\n if(filterDic.fieldName === this.definitidonForm.definitidon[index].fieldName){\r\n result = filterDic\r\n }\r\n }\r\n return result\r\n },\r\n //字段change事件\r\n fieldChange(index){\r\n this.definitidonForm.definitidon[index].fieldType = this.getFilterDic(index).dicType\r\n this.definitidonForm.definitidon[index].dicType = \"\"\r\n this.definitidonForm.definitidon[index].value = \"\"\r\n this.definitidonForm.definitidon[index].secondValue = \"\"\r\n },\r\n //新增筛选\r\n submitFilter(){\r\n this.$refs.definitidonForm.validate((valid) => {\r\n if (valid) {\r\n let filterNo = this.clickTabFilter;\r\n let filterContent = JSON.stringify(this.definitidonForm.definitidon)\r\n let data = {\r\n vue: this.parentVm.$options.name,\r\n filterNo: filterNo,\r\n filterContent: filterContent\r\n }\r\n if(filterNo !== \"default\"){\r\n this.$confirm('此操作将保存该筛选, 是否继续?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n putJson(\"/mftcc-sys-server/sys/sysUserSearchFilter/update\",data,true,reponse => {\r\n if(reponse.code === 0){\r\n this.$message({\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true,\r\n message:reponse.msg\r\n });\r\n this.filters.forEach((currentValue,index,arr) => {\r\n if(currentValue.filterNo == filterNo){\r\n currentValue.filterContent = filterContent\r\n }\r\n })\r\n }else{\r\n this.$alert(reponse.msg, this.$alertTitle, {\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true\r\n });\r\n }\r\n });\r\n });\r\n }else{\r\n this.$prompt('请输入筛选名称', this.$alertTitle, {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputPattern: /\\S/,\r\n inputErrorMessage: '筛选名称不能为空'\r\n }).then(({ value }) => {\r\n data.filterName = value\r\n postJson(\"/mftcc-sys-server/sys/sysUserSearchFilter/insert\",data,true,res => {\r\n if(res.code === 0){\r\n this.$message({\r\n type: res.msgType,\r\n dangerouslyUseHTMLString:true,\r\n message: res.msg\r\n });\r\n this.filters.push(res.data);\r\n this.editableFilter = res.data.filterNo;\r\n this.clickTabFilter = res.data.filterNo;\r\n }else{\r\n this.$alert(res.msg,this.$alertTitle,{\r\n type: res.msgType,\r\n dangerouslyUseHTMLString:true\r\n });\r\n }\r\n });\r\n }).catch(() => { \r\n });\r\n }\r\n } else {\r\n return false;\r\n }\r\n });\r\n \r\n },\r\n //删除已保存筛选\r\n removeFilter(filterNo){\r\n if(filterNo !== 'default'){\r\n this.$confirm('此操作将永久删除该筛选, 是否继续?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n del(\"/mftcc-sys-server/sys/sysUserSearchFilter/deleteById/\"+filterNo,null,true,reponse => {\r\n if(reponse.code === 0){\r\n this.$message({\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true,\r\n message:reponse.msg\r\n });\r\n if(this.clickTabFilter === filterNo){\r\n this.editableFilter = 'default';\r\n this.clickTabFilter = 'default';\r\n this.resetDefinitidon();\r\n }\r\n this.filters.forEach((currentValue,index,arr) => {\r\n if(currentValue.filterNo == filterNo){\r\n this.filters.splice(index, 1)\r\n }\r\n })\r\n }else{\r\n this.$alert(reponse.msg, this.$alertTitle, {\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true\r\n });\r\n }\r\n });\r\n });\r\n }\r\n },\r\n //点击已保存的筛选\r\n clickFilter(filter){\r\n if(this.clickTabFilter !== filter.name){\r\n this.filters.forEach(currentValue => {\r\n if(currentValue.filterNo == filter.name){\r\n this.definitidonForm.definitidon = JSON.parse(currentValue.filterContent)\r\n }\r\n })\r\n this.clickTabFilter = filter.name\r\n }\r\n },\r\n //查询按钮回调\r\n search(){\r\n this.$refs.definitidonForm.validate((valid) => {\r\n if (valid) {\r\n let searchData = this.getSearchData({})\r\n this.$emit('search', searchData);\r\n } else {\r\n return false;\r\n }\r\n });\r\n },\r\n menuSearch(searchData){\r\n this.$emit('search', searchData);\r\n },\r\n //移除筛选\r\n removeDefinitidon(index) {\r\n this.definitidonForm.definitidon.splice(index, 1)\r\n },\r\n //重置筛选\r\n resetDefinitidon(){\r\n let definitidonObj = JSON.parse(JSON.stringify(this.defaultDefinitidon))\r\n this.definitidonForm.definitidon = [definitidonObj];\r\n },\r\n //添加筛选条件\r\n addDefinitidon() {\r\n let definitidonObj = JSON.parse(JSON.stringify(this.defaultDefinitidon))\r\n this.definitidonForm.definitidon.push(definitidonObj);\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n\r\n.mftcc-definitidon-search .dynamic-search{\r\n\twidth: 100%;\r\n\tmargin: 0;\r\n\theight: 34px;\r\n\tmargin-top: 8px;\r\n }\r\n.mftcc-definitidon-search .dynamic-search .dynamic-input{\r\n\twidth: 230px;\r\n\tfloat: left;\r\n}\r\n.mftcc-definitidon-search .dynamic-search .dynamic-input input{\r\n\tborder: 1px solid #4a7ec3;\r\n\tborder-radius: 0px;\r\n\theight: 34px;\r\n}\r\n.mftcc-definitidon-search .dynamic-search button{\r\n\tcolor: #4a7ec3;\r\n\tborder-color: #4A7EC3;\r\n\tborder-radius: 2px;\r\n\theight: 100%;\r\n\tfloat: left;\r\n padding: 10px 20px;\r\n background: none;\r\n}\r\n\r\n.mftcc-definitidon-search .custom-search{\r\n display: flex;\r\n margin-top: 4px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button{\r\n\tfont-size: 12px;\r\n\tcolor: #4a7ec3;\r\n margin-left: 10px;\r\n margin-top: -3px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button i{\r\n\tfont-size: 16px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button span{\r\n\tposition: relative;\r\n\ttop: -2px;\r\n}\r\n\r\n.mftcc-definitidon-search .custom-search .el-menu{\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.mftcc-definitidon-search .el-menu .el-menu-item{\r\n height:34px;\r\n line-height: 34px;\r\n border: none;\r\n font-size: 12px;\r\n color: #3D3D3D;\r\n}\r\n.mftcc-definitidon-search .el-menu .el-menu-item:hover{\r\n background: none;\r\n}\r\n\r\n.mftcc-definitidon-search .el-menu .el-menu-item.is-active{\r\n color: #4A7EC3;\r\n\tfont-size: 14px;\r\n padding: 0 20px!important;\r\n border-bottom: 1px solid rgba(74,126,195,1) !important;\r\n}\r\n\r\n.mftcc-definitidon-search .search-col{\r\n float: right;\r\n width: auto;\r\n}\r\n\r\n\t.mftcc-definitidon-search .el-form>.el-form-item>.el-form-item__content{\r\n\t\tmargin: 0 auto;\r\n\t\twidth: 840px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-input{\r\n\t\tpadding-right: 10px;\r\n\t\tbox-sizing: border-box;\r\n\t}\r\n\t.mftcc-definitidon-search .el-col-3{\r\n\t\t text-align: right;\r\n\t\t padding-right: 10px;\r\n }\r\n .mftcc-definitidon-search .el-col-2:last-child{\r\n\t\t padding-left: 10px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-col-1.line{\r\n\t\ttext-align: center;\r\n\t\tpadding-right: 10px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-input__inner,.mftcc-definitidon-search .el-select{\r\n\t\twidth: 100%;\r\n\t}\r\n\t.mftcc-definitidon-search .el-date-editor.el-input,.mftcc-definitidon-search .el-date-editor.el-input__inner{\r\n width: calc(100% - 10px);\r\n border-radius: 0;\r\n height: 34px;\r\n }\r\n\r\n \t.mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange{\r\n border: 1px solid rgba(153,153,153,1);\r\n }\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range__icon,\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range__close-icon,\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range-separator{\r\n line-height: 26px;\r\n }\r\n\t.mftcc-definitidon-search .el-button.is-circle{\r\n\t\tpadding: 0;\r\n\t\tborder: none;\r\n\t}\r\n\t.mftcc-definitidon-search .el-button--small{\r\n\t\tfont-size: 16px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-input__suffix{\r\n right: 10px;\r\n top:-2px\r\n\t}\r\n\t.mftcc-definitidon-search .el-input .el-input__inner{\r\n height: 34px;\r\n\t\tpadding-right: 20px;\r\n\t\tborder: 1px solid rgba(153,153,153,1);\r\n border-radius: 0;\r\n\t}\r\n\t.mftcc-definitidon-search .el-radio-button__inner{\r\n\t\tpadding:10px 6px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-radio-button__orig-radio:checked+.el-radio-button__inner{\r\n\t\tbackground-color: rgba(68,148,249,1);\r\n border-color: rgba(68,148,249,1)\r\n\t}\r\n\t.mftcc-list .mftcc-search-form{\r\n\t\tposition: relative;\r\n\t}\r\n\t\t.mftcc-definitidon-search .el-form {\r\n\t\t\tpadding-bottom: 0px;\r\n\t\t\toverflow: hidden;\r\n padding-top: 10px;\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n }\r\n .mftcc-definitidon-search .dynamic-edit-filter{\r\n padding: 0 20px;\r\n }\r\n\t.mftcc-definitidon-search .mftcc-definitidon-btn{\r\n position: relative;\r\n text-align: center;\r\n padding: 6px 0;\r\n background: #EDF2FA;\r\n border:1px solid rgba(225,226,227,1);\r\n margin-bottom: 0;\r\n float: none;\r\n\t}\r\n\t.mftcc-definitidon-search .el-button--primary{\r\n\t\tpadding: 10px 36px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-button--primary:first-child{\r\n\t\tbackground:#4494F9;\r\n\t\tborder-color:#4494F9;\r\n\t}\r\n\t.mftcc-definitidon-search .el-button--primary:last-child{\r\n\t\tbackground:#fff ;\r\n\t\tborder-color:#D2D4D6 ;\r\n\t\tcolor: #333;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item{\r\n\t\tborder-radius: 14px;\r\n\t\theight: 28px;\r\n\t\tline-height: 28px;\r\n\t\tbackground: #EDF2FA;\r\n\t\tmargin-left: 10px;\r\n\t\tborder: 1px solid #E1E2E3;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs--card>.el-tabs__header .el-tabs__nav{\r\n\t\tborder:none;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs.el-tabs--card.el-tabs--top{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: relative;\r\n\t\ttop:20px;\r\n\t\tmargin-bottom: 20px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs--card>.el-tabs__header{\r\n\t\tborder: none;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{\r\n background: #E3F2FD;\r\n color: #333;\r\n }\r\n .mftcc-definitidon-search .el-row:last-child{\r\n border:1px solid #E1E2E3;\r\n background: #fafafa;\r\n }\r\n.mftcc-definitidon-search .el-row:first-child{\r\n height: 50px;\r\n }\r\n\t@media screen and (min-width:1440px){\r\n \t.mftcc-definitidon-search .el-form>.el-form-item{\r\n\t\t\tfloat: left;\r\n\t\t}\r\n}\r\n\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n\r\n.mftcc-definitidon-search .dynamic-search{\r\n\twidth: 100%;\r\n\tmargin: 0;\r\n\theight: 34px;\r\n\tmargin-top: 8px;\r\n }\r\n.mftcc-definitidon-search .dynamic-search .dynamic-input{\r\n\twidth: 230px;\r\n\tfloat: left;\r\n}\r\n.mftcc-definitidon-search .dynamic-search .dynamic-input input{\r\n\tborder: 1px solid #4a7ec3;\r\n\tborder-radius: 0px;\r\n\theight: 34px;\r\n}\r\n.mftcc-definitidon-search .dynamic-search button{\r\n\tcolor: #4a7ec3;\r\n\tborder-color: #4A7EC3;\r\n\tborder-radius: 2px;\r\n\theight: 100%;\r\n\tfloat: left;\r\n padding: 10px 20px;\r\n background: none;\r\n}\r\n.mftcc-definitidon-search .custom-search{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n margin-top: 4px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button{\r\n\tfont-size: 12px;\r\n\tcolor: #4a7ec3;\r\n margin-left: 10px;\r\n margin-top: -3px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button i{\r\n\tfont-size: 16px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button span{\r\n\tposition: relative;\r\n\ttop: -2px;\r\n}\r\n.mftcc-definitidon-search .custom-search .el-menu{\r\n border: none;\r\n background: none;\r\n}\r\n.mftcc-definitidon-search .el-menu .el-menu-item{\r\n height:34px;\r\n line-height: 34px;\r\n border: none;\r\n font-size: 12px;\r\n color: #3D3D3D;\r\n}\r\n.mftcc-definitidon-search .el-menu .el-menu-item:hover{\r\n background: none;\r\n}\r\n.mftcc-definitidon-search .el-menu .el-menu-item.is-active{\r\n color: #4A7EC3;\r\n\tfont-size: 14px;\r\n padding: 0 20px!important;\r\n border-bottom: 1px solid rgba(74,126,195,1) !important;\r\n}\r\n.mftcc-definitidon-search .search-col{\r\n float: right;\r\n width: auto;\r\n}\r\n.mftcc-definitidon-search .el-form>.el-form-item>.el-form-item__content{\r\n\t\tmargin: 0 auto;\r\n\t\twidth: 840px;\r\n\t}\r\n.mftcc-definitidon-search .el-input{\r\n\t\tpadding-right: 10px;\r\n\t\t-webkit-box-sizing: border-box;\r\n\t\t box-sizing: border-box;\r\n\t}\r\n.mftcc-definitidon-search .el-col-3{\r\n\t\t text-align: right;\r\n\t\t padding-right: 10px;\r\n }\r\n.mftcc-definitidon-search .el-col-2:last-child{\r\n\t\t padding-left: 10px;\r\n\t}\r\n.mftcc-definitidon-search .el-col-1.line{\r\n\t\ttext-align: center;\r\n\t\tpadding-right: 10px;\r\n\t}\r\n.mftcc-definitidon-search .el-input__inner,.mftcc-definitidon-search .el-select{\r\n\t\twidth: 100%;\r\n\t}\r\n.mftcc-definitidon-search .el-date-editor.el-input,.mftcc-definitidon-search .el-date-editor.el-input__inner{\r\n width: calc(100% - 10px);\r\n border-radius: 0;\r\n height: 34px;\r\n }\r\n.mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange{\r\n border: 1px solid rgba(153,153,153,1);\r\n }\r\n.mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range__icon,\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range__close-icon,\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range-separator{\r\n line-height: 26px;\r\n }\r\n.mftcc-definitidon-search .el-button.is-circle{\r\n\t\tpadding: 0;\r\n\t\tborder: none;\r\n\t}\r\n.mftcc-definitidon-search .el-button--small{\r\n\t\tfont-size: 16px;\r\n\t}\r\n.mftcc-definitidon-search .el-input__suffix{\r\n right: 10px;\r\n top:-2px\r\n\t}\r\n.mftcc-definitidon-search .el-input .el-input__inner{\r\n height: 34px;\r\n\t\tpadding-right: 20px;\r\n\t\tborder: 1px solid rgba(153,153,153,1);\r\n border-radius: 0;\r\n\t}\r\n.mftcc-definitidon-search .el-radio-button__inner{\r\n\t\tpadding:10px 6px;\r\n\t}\r\n.mftcc-definitidon-search .el-radio-button__orig-radio:checked+.el-radio-button__inner{\r\n\t\tbackground-color: rgba(68,148,249,1);\r\n border-color: rgba(68,148,249,1)\r\n\t}\r\n.mftcc-list .mftcc-search-form{\r\n\t\tposition: relative;\r\n\t}\r\n.mftcc-definitidon-search .el-form {\r\n\t\t\tpadding-bottom: 0px;\r\n\t\t\toverflow: hidden;\r\n padding-top: 10px;\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n }\r\n.mftcc-definitidon-search .dynamic-edit-filter{\r\n padding: 0 20px;\r\n }\r\n.mftcc-definitidon-search .mftcc-definitidon-btn{\r\n position: relative;\r\n text-align: center;\r\n padding: 6px 0;\r\n background: #EDF2FA;\r\n border:1px solid rgba(225,226,227,1);\r\n margin-bottom: 0;\r\n float: none;\r\n\t}\r\n.mftcc-definitidon-search .el-button--primary{\r\n\t\tpadding: 10px 36px;\r\n\t}\r\n.mftcc-definitidon-search .el-button--primary:first-child{\r\n\t\tbackground:#4494F9;\r\n\t\tborder-color:#4494F9;\r\n\t}\r\n.mftcc-definitidon-search .el-button--primary:last-child{\r\n\t\tbackground:#fff ;\r\n\t\tborder-color:#D2D4D6 ;\r\n\t\tcolor: #333;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item{\r\n\t\tborder-radius: 14px;\r\n\t\theight: 28px;\r\n\t\tline-height: 28px;\r\n\t\tbackground: #EDF2FA;\r\n\t\tmargin-left: 10px;\r\n\t\tborder: 1px solid #E1E2E3;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs--card>.el-tabs__header .el-tabs__nav{\r\n\t\tborder:none;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs.el-tabs--card.el-tabs--top{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: relative;\r\n\t\ttop:20px;\r\n\t\tmargin-bottom: 20px;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs--card>.el-tabs__header{\r\n\t\tborder: none;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{\r\n background: #E3F2FD;\r\n color: #333;\r\n }\r\n.mftcc-definitidon-search .el-row:last-child{\r\n border:1px solid #E1E2E3;\r\n background: #fafafa;\r\n }\r\n.mftcc-definitidon-search .el-row:first-child{\r\n height: 50px;\r\n }\r\n@media screen and (min-width:1440px){\r\n \t.mftcc-definitidon-search .el-form>.el-form-item{\r\n\t\t\tfloat: left;\r\n\t\t}\r\n}\r\n\r\n","<template>\r\n <div class=\"act-form\">\r\n <iframe :src=\"src\" ref=\"iframeDemo\" frameBorder=\"0\"></iframe>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n\r\nexport default {\r\n data () {\r\n return {\r\n src: 'http://192.168.1.113:8080'\r\n }\r\n },\r\n mounted: function () {\r\n }\r\n}\r\n</script>\r\n<style scoped>\r\n.act-form,.act-form iframe{\r\n padding: 0;\r\n height: 100%;\r\n width: 100%;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.act-form,.act-form iframe{\r\n padding: 0;\r\n height: 100%;\r\n width: 100%;\r\n}\r\n","<template>\r\n <div class=\"mftcc-layout-header\">\r\n <div class=\"outer-west-logo\">\r\n <div class=\"layout-logo\"></div>\r\n </div>\r\n <div class=\"middle-north-west\">\r\n <span class=\"logodes\"></span>\r\n <div class=\"layout-title\"></div>\r\n </div>\r\n <div class=\"middle-north-east\" @click=\"fixedMenu\">\r\n <i class=\"el-icon-menu\"></i>\r\n </div>\r\n <div class=\"middle-north-center\">\r\n <el-menu\r\n mode=\"horizontal\"\r\n @select=\"headerMenuFunc\"\r\n class=\"mftcc-header-menu\"\r\n ref=\"headerMenu\"\r\n >\r\n <el-menu-item index=\"search\" v-if=\"searchShow\">\r\n <i class=\"el-icon-search\"></i>\r\n <span>搜索</span>\r\n </el-menu-item>\r\n <el-menu-item index=\"notice\" class=\"menu-notice\">\r\n <el-badge :value=\"noticeNum\" :max=\"99\" class=\"menu-notice-num\" type=\"info\">\r\n <i class=\"el-icon-message\"></i>\r\n </el-badge>\r\n </el-menu-item>\r\n <el-menu-item index=\"approval\" class=\"menu-approval\">\r\n <i class=\"el-icon-s-comment\"></i>\r\n <el-badge :value=\"approvalNum\" class=\"menu-approval-num\" type=\"info\">\r\n <span>待办任务</span>\r\n </el-badge>\r\n </el-menu-item>\r\n <el-menu-item index=\"user\" class=\"menu-user\">\r\n <el-popover\r\n placement=\"bottom-end\"\r\n title=\"\"\r\n trigger=\"hover\"\r\n width=\"190px\"\r\n popper-class=\"menu-user-content\"\r\n :offset=\"0\"\r\n >\r\n <div class=\"menu-user-title\" @click=\"headerMenuFunc('user')\">\r\n <div class=\"menu-user-message\">\r\n <div>\r\n <p>{{ userName }}</p>\r\n <p>{{ phone }}</p>\r\n </div>\r\n <div>\r\n <img :src=\"userImg\" />\r\n </div>\r\n </div>\r\n <div class=\"menu-user-depar\">\r\n <p>{{ brName }}</p>\r\n </div>\r\n </div>\r\n <div class=\"menu-user-button\">\r\n <el-button type=\"primary\" icon=\"el-icon-lock\" @click=\"updatePassword\"\r\n >修改密码</el-button\r\n >\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <el-button type=\"primary\" icon=\"el-icon-circle-close\" @click=\"signOut\"\r\n >退出系统</el-button\r\n >\r\n </div>\r\n <div class=\"menu-user-info\" slot=\"reference\">\r\n <img :src=\"userImg\" />\r\n <span>欢迎您,{{ userName }}</span>\r\n </div>\r\n </el-popover>\r\n </el-menu-item>\r\n </el-menu>\r\n </div>\r\n </div>\r\n</template>\r\n<script>\r\nexport default {\r\n data() {\r\n return {\r\n searchShow: false,\r\n };\r\n },\r\n props: {\r\n userName: String,\r\n approvalNum: String,\r\n noticeNum: Number,\r\n brName: String,\r\n phone: String,\r\n userImg: String,\r\n },\r\n methods: {\r\n signOut() {\r\n this.$emit(\"signOut\");\r\n },\r\n updatePassword() {\r\n this.$emit(\"updatePassword\");\r\n },\r\n headerMenuFunc(index, indexPath) {\r\n this.$emit(\"cancelSelect\", \"menu\", null);\r\n this.$emit(\"menuFunc\", index);\r\n },\r\n fixedMenu() {\r\n this.$emit(\"fixedMenuFunc\");\r\n },\r\n cancelSelect(index) {\r\n this.$refs.headerMenu.activeIndex = index;\r\n },\r\n getSelection() {\r\n return this.$refs.headerMenu.activeIndex;\r\n },\r\n },\r\n};\r\n</script>\r\n<style scoped>\r\n.layout-logo {\r\n background: url(/mftcc-base-web/static/libs/base/images/logo.png) no-repeat center;\r\n height: 100%;\r\n background-size: 100% 100%;\r\n}\r\n.layout-title {\r\n width: 214px;\r\n background: url(/mftcc-base-web/static/libs/base/images/logo_title.png) no-repeat center;\r\n height: 32px;\r\n background-size: 100% 100%;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.layout-logo {\r\n background: url(/mftcc-base-web/static/libs/base/images/logo.png) no-repeat center;\r\n height: 100%;\r\n background-size: 100% 100%;\r\n}\r\n.layout-title {\r\n width: 214px;\r\n background: url(/mftcc-base-web/static/libs/base/images/logo_title.png) no-repeat center;\r\n height: 32px;\r\n background-size: 100% 100%;\r\n}\r\n","<template>\r\n <div class=\"mftcc-menu\">\r\n <el-menu :collapse=\"iscollapse\" class=\"menu\">\r\n <!-- 目录 -->\r\n <el-submenu :index=\"menu.id\" v-for=\"(menu, index) in menuData\" :key=\"index\">\r\n <template slot=\"title\">\r\n <i :class=\"menu.icon\"></i>\r\n <span slot=\"title\">{{menu.title}}</span>\r\n </template>\r\n \r\n <!-- 子菜单 -->\r\n <el-menu-item\r\n v-for=\"(item, index) in menu.children\"\r\n :key=\"index\"\r\n :index=\"item.id\"\r\n @click=\"navRouter(item)\"\r\n v-if=\"item.children === undefined || item.children.length===0\">\r\n <template slot=\"title\">\r\n <i :class=\"item.icon\"></i>\r\n <span slot=\"title\">{{item.title}}</span>\r\n </template>\r\n </el-menu-item>\r\n \r\n <el-submenu v-for=\"(item, index) in menu.children\"\r\n :key=\"index\"\r\n :index=\"item.id\"\r\n v-if=\"item.children !== undefined && item.children.length > 0\">\r\n <template slot=\"title\">\r\n <i :class=\"item.icon\"></i>\r\n <span slot=\"title\">{{item.title}}</span>\r\n </template>\r\n <!-- 子菜单 -->\r\n <el-menu-item\r\n v-for=\"(child, index) in item.children\"\r\n :key=\"index\"\r\n :index=\"child.id\"\r\n @click=\"navRouter(child)\">\r\n <template slot=\"title\">\r\n <i :class=\"child.icon\"></i>\r\n <span slot=\"title\">{{child.title}}</span>\r\n </template>\r\n </el-menu-item>\r\n </el-submenu>\r\n </el-submenu>\r\n </el-menu>\r\n </div>\r\n</template>\r\n<script>\r\nimport bus from \"../utils/bus\";\r\nexport default {\r\n inject: ['reload'],\r\n data() {\r\n return {\r\n menuData: []\r\n };\r\n },\r\n props: [\"iscollapse\"],\r\n created() {\r\n this.initMenu();\r\n },\r\n methods: {\r\n navRouter(item) {\r\n this.$router.push(item.url);\r\n // bus.$emit(\"changeMenu\", item);\r\n this.reload();\r\n },\r\n initMenu() {\r\n this.menuData = this.$store.getters.menu;\r\n }\r\n }\r\n};\r\n</script>\r\n<style>\r\n.mftcc-menu {\r\n height: 100%;\r\n}\r\n.mftcc-menu .el-menu{\r\n width: 200px;\r\n min-height: 100%;\r\n background-color: #304156;\r\n}\r\n.mftcc-menu .el-submenu>.el-submenu__title{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .el-submenu>.el-submenu__title:hover {\r\n background-color: #001528;\r\n}\r\n.mftcc-menu .menu>.el-submenu>.el-submenu__title{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .menu>.el-submenu>.el-submenu__title:hover {\r\n background-color: #263445;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline{\r\n background-color: #1f2d3d;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item,.el-menu-item{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item:hover,.el-menu-item:hover{\r\n background-color: #001528;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item.is-active{\r\n color: #1890ff;\r\n}\r\n.mftcc-menu .el-menu-item:focus, .el-menu-item:hover {\r\n outline: 0;\r\n background-color: transparent;\r\n}\r\n.mftcc-menu .el-menu--collapse{\r\n width: 64px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-menu {\r\n height: 100%;\r\n}\r\n.mftcc-menu .el-menu{\r\n width: 200px;\r\n min-height: 100%;\r\n background-color: #304156;\r\n}\r\n.mftcc-menu .el-submenu>.el-submenu__title{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .el-submenu>.el-submenu__title:hover {\r\n background-color: #001528;\r\n}\r\n.mftcc-menu .menu>.el-submenu>.el-submenu__title{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .menu>.el-submenu>.el-submenu__title:hover {\r\n background-color: #263445;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline{\r\n background-color: #1f2d3d;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item,.el-menu-item{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item:hover,.el-menu-item:hover{\r\n background-color: #001528;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item.is-active{\r\n color: #1890ff;\r\n}\r\n.mftcc-menu .el-menu-item:focus, .el-menu-item:hover {\r\n outline: 0;\r\n background-color: transparent;\r\n}\r\n.mftcc-menu .el-menu--collapse{\r\n width: 64px;\r\n}\r\n","<template>\r\n <el-tabs v-model=\"activeIndex\" type=\"card\" closable @tab-click=\"tabClick\" @tab-remove=\"removeTab\">\r\n <el-tab-pane\r\n label=\"首页\"\r\n name=\"/main\">\r\n </el-tab-pane>\r\n <el-tab-pane\r\n v-for=\"item in tabsData\"\r\n :key=\"item.name\"\r\n :label=\"item.title\"\r\n :name=\"item.url\">\r\n </el-tab-pane>\r\n </el-tabs>\r\n</template>\r\n<script>\r\nimport bus from \"../utils/bus\";\r\nexport default {\r\n data() {\r\n return {\r\n activeIndex: '',\r\n tabsData: []\r\n }\r\n },\r\n created(){\r\n this.$store.commit(\"set_keepAlive\",\"\");\r\n if(this.$route.path != \"/main\"){\r\n this.checkTab(this.$route.meta.title, this.$route.path, this.$route.name);\r\n }\r\n // bus.$on(\"changeMenu\", (item) => { \r\n // this.checkTab(item.title, item.url, item.name);\r\n // });\r\n },\r\n methods: {\r\n checkTab(title, url, name) {\r\n let flag = false;\r\n for (let tab of this.tabsData) {\r\n if (tab.url === url) {\r\n flag = true;\r\n this.activeTab(title,url);\r\n break;\r\n }\r\n }\r\n if(!flag){\r\n this.addTab(title, url, name);\r\n }\r\n },\r\n activeTab(title, url){\r\n this.activeIndex = url;\r\n },\r\n addTab(title, url, name) {\r\n this.tabsData.push({\r\n name: name,\r\n title: title,\r\n url: url\r\n });\r\n let keepAlive = this.$store.getters.keepAlive;\r\n let arr;\r\n if(keepAlive == \"\"){\r\n arr = [];\r\n }else{\r\n arr = keepAlive.split(\",\");\r\n }\r\n arr.push(name);\r\n arr = arr.join(\",\");\r\n this.$store.commit(\"set_keepAlive\",arr);\r\n \r\n this.activeTab(title, url);\r\n },\r\n tabClick(tab) {\r\n let url = this.activeIndex;\r\n this.activeTab(tab.label, url);\r\n this.$router.push(url);\r\n },\r\n removeTab(targetName) {\r\n let tabs = this.tabsData;\r\n let activeName = this.activeIndex;\r\n let tabTitle = \"\",tabName = \"\";\r\n tabs.forEach((tab, index) => {\r\n if (tab.url === targetName) {\r\n tabName = tabs[index].name;\r\n let nextTab = tabs[index + 1] || tabs[index - 1];\r\n if (nextTab) {\r\n activeName = nextTab.url;\r\n tabTitle = nextTab.title;\r\n }\r\n }\r\n });\r\n \r\n this.tabsData = tabs.filter(tab => tab.url !== targetName);\r\n if(this.tabsData.length == 0){\r\n activeName = \"/main\";\r\n }\r\n \r\n let keepAlive = this.$store.getters.keepAlive;\r\n let arr = keepAlive.split(\",\");\r\n for(var i = 0; i < arr.length; i++) {\r\n if(arr[i] == tabName) {\r\n arr.splice(i, 1);\r\n break;\r\n }\r\n }\r\n arr = arr.join(\",\");\r\n this.$store.commit(\"set_keepAlive\",arr);\r\n\r\n this.activeTab(tabTitle, activeName);\r\n this.$router.push(activeName);\r\n }\r\n }\r\n }\r\n</script>\r\n<style scoped>\r\n.el-tabs--card>.el-tabs__header .el-tabs__item:first-child:hover{\r\n padding-left: 20px;\r\n}\r\n.el-tabs--card>.el-tabs__header .el-tabs__item:first-child>span{\r\n display: none;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.el-tabs--card>.el-tabs__header .el-tabs__item:first-child:hover{\r\n padding-left: 20px;\r\n}\r\n.el-tabs--card>.el-tabs__header .el-tabs__item:first-child>span{\r\n display: none;\r\n}\r\n","<template>\r\n <el-container class=\"mftcc-header\">\r\n <el-aside width=\"auto\">\r\n <mftcc-menu :iscollapse=\"iscollapse\"></mftcc-menu> \r\n </el-aside>\r\n <el-container>\r\n <el-header>\r\n <i class=\"menuCollapse el-icon-s-fold\" @click=\"collapseMenu()\"></i>\r\n <mftcc-breadcrumb ></mftcc-breadcrumb>\r\n <div class=\"menu-user\">\r\n <el-popover\r\n placement=\"bottom-end\"\r\n title=\"\"\r\n trigger=\"hover\"\r\n width=\"190px\"\r\n popper-class=\"menu-user-content\"\r\n :offset=\"0\">\r\n <div class=\"menu-user-title\">\r\n <div class=\"menu-user-message\">\r\n <div>\r\n <p>{{ opName }}</p>\r\n <p>{{ phone }}</p>\r\n </div>\r\n <div>\r\n <img :src=\"userImg\">\r\n </div>\r\n </div>\r\n <div class='menu-user-depar'>\r\n <p>{{ brName }}</p>\r\n </div>\r\n </div>\r\n <div class=\"menu-user-button\">\r\n <el-button type=\"primary\" icon=\"el-icon-lock\" @click=\"updatePassword\">修改密码</el-button>\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <el-button type=\"primary\" icon=\"el-icon-circle-close\" @click=\"signOut\">退出系统</el-button>\r\n </div>\r\n <div class=\"menu-user-info\" slot=\"reference\">\r\n <img :src=\"userImg\"> \r\n <span>欢迎您,{{ opName }}</span>\r\n </div>\r\n </el-popover>\r\n </div>\r\n </el-header>\r\n <!-- <mftcc-tab ></mftcc-tab> -->\r\n <el-main class=\"center-content\">\r\n <transition name=\"fade-transform\" mode=\"out-in\">\r\n <!-- <keep-alive :include=\"keepAlive\"> -->\r\n <router-view v-if=\"isRouterAlive\"/>\r\n <!-- </keep-alive> -->\r\n </transition>\r\n </el-main>\r\n </el-container>\r\n <el-dialog \r\n :visible.sync=\"updatePasswordFormShow\"\r\n :close-on-click-modal=\"false\"\r\n width=\"50%\"\r\n :center=\"true\">\r\n <div slot=\"title\" class=\"dialog-header\">\r\n <label>修改密码</label>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-form :model=\"updatePasswordForm\" :rules=\"rules\" ref=\"updatePasswordForm\" label-width=\"100px\">\r\n <el-form-item\r\n label=\"登录账号\"\r\n prop=\"opNo\"\r\n v-show=\"false\">\r\n <el-input \r\n ref=\"opNo\"\r\n type=\"text\"\r\n v-model=\"updatePasswordForm.opNo\"\r\n placeholder=\"请输入登录账号\"\r\n :disabled=\"true\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item\r\n label=\"用户名\"\r\n prop=\"opName\"\r\n v-show=\"true\">\r\n <el-input \r\n ref=\"opName\"\r\n type=\"text\"\r\n v-model=\"updatePasswordForm.opName\"\r\n placeholder=\"请输入用户名\"\r\n :disabled=\"true\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item\r\n label=\"原密码\"\r\n prop=\"password\"\r\n v-show=\"true\">\r\n <el-input \r\n ref=\"password\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"updatePasswordForm.password\"\r\n placeholder=\"请输入原密码\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item\r\n label=\"新密码\"\r\n prop=\"newPassword\"\r\n v-show=\"true\">\r\n <el-input \r\n ref=\"newPassword\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"updatePasswordForm.newPassword\"\r\n placeholder=\"请输入新密码\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item\r\n label=\"确认密码\"\r\n prop=\"newPasswordChk\"\r\n v-show=\"true\">\r\n <el-input \r\n ref=\"newPasswordChk\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"updatePasswordForm.newPasswordChk\"\r\n placeholder=\"确认密码\">\r\n </el-input>\r\n </el-form-item>\r\n </el-form>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\"> \r\n <el-button type=\"primary\" @click=\"updatePasswordFunc\">确 定</el-button>\r\n <el-button @click=\"updatePasswordFormShow = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport mftccMenu from '../layout/menu'\r\nimport mftccTab from '../layout/tab'\r\nimport mftccBreadcrumb from '../layout/breadcrumb'\r\nimport {postJsonNoLoading,postJson} from '../axios'\r\nexport default {\r\n name: 'App',\r\n components: {\r\n mftccMenu,\r\n mftccTab,\r\n mftccBreadcrumb\r\n },\r\n data(){\r\n return {\r\n iscollapse: false,\r\n\r\n opNo: this.$store.getters.user.opNo,\r\n opName: this.$store.getters.user.opName,\r\n brName: this.$store.getters.user.brName,\r\n phone: this.$store.getters.user.tel,\r\n userImg: require(\"./default/images/op_user.png\"),\r\n\t \r\n updatePasswordFormShow: false,\r\n updatePasswordForm: {\r\n opNo: \"\",\r\n opName: \"\",\r\n password: \"\",\r\n newPassword: \"\",\r\n newPasswordChk: \"\"\r\n },\r\n rules: {\r\n password: [\r\n {required: true, message: \"密码不能为空\", trigger: \"blur\" },\r\n {message: \"密码错误\", trigger: \"blur\", validator: this.validatePassword }\r\n ],\r\n newPassword: [\r\n {required: true, message: \"新密码不能为空\", trigger: \"blur\" },\r\n {message: \"\", trigger: \"blur\", validator: this.validateNewPassword }\r\n ],\r\n newPasswordChk: [\r\n {required: true, message: \"确认密码不能为空\", trigger: \"blur\" },\r\n {message: \"两次输入不同\", trigger: \"blur\", validator: this.validateNewPasswordChk }\r\n ]\r\n },\r\n isRouterAlive: true\r\n }\r\n },\r\n created: function () {\r\n \r\n },\r\n computed: {\r\n keepAlive() {\r\n return this.$store.getters.keepAlive\r\n }\r\n },\r\n provide(){\r\n return {\r\n reload:this.reload\r\n }\r\n },\r\n methods: {\r\n reload () {\r\n this.isRouterAlive = false\r\n this.$nextTick(() => (this.isRouterAlive = true))\r\n },\r\n collapseMenu(){\r\n if(this.iscollapse){\r\n this.iscollapse = false;\r\n }else{\r\n this.iscollapse = true;\r\n }\r\n },\r\n signOut(){\r\n let data = {\r\n opNo: this.opNo\r\n }\r\n postJsonNoLoading(\"/mftcc-sys-server/loginOut\",data,true,reponse => {\r\n },error => {\r\n });\r\n this.$store.commit('clearLogin');\r\n this.$router.push(\"/login\");\r\n },\r\n //修改密码事件回调\r\n updatePassword(){\r\n this.updatePasswordFormShow = true;\r\n this.updatePasswordForm.opNo = this.opNo;\r\n this.updatePasswordForm.opName = this.opName;\r\n },\r\n validatePassword(rule, value, callback){\r\n let data = {\r\n opNo: this.updatePasswordForm.opNo,\r\n password: this.updatePasswordForm.password\r\n }\r\n postJsonNoLoading(\"/mftcc-sys-server/sys/sysUser/validatePassword\",data,true,reponse => {\r\n if(reponse.code === 0){\r\n callback();\r\n }else{\r\n callback(new Error(reponse.msg));\r\n }\r\n },error => {\r\n callback(new Error('连接异常,密码校验失败'));\r\n });\r\n },\r\n validateNewPassword(rule, value, callback){\r\n let opNo = this.updatePasswordForm.opNo\r\n let newPassword = this.updatePasswordForm.newPassword\r\n let data = {\r\n opNo:opNo,\r\n password: newPassword\r\n }\r\n postJsonNoLoading(\"/mftcc-sys-server/sys/sysSecAuditConfig/validatePWAjax\",data,true,reponse => {\r\n if(reponse.code === 0){\r\n if(reponse.data.flag == \"success\"){\r\n callback();\r\n }else{\r\n callback(new Error(reponse.data.msg));\r\n }\r\n }else{\r\n callback(new Error(reponse.msg));\r\n }\r\n },error => {\r\n callback(new Error('连接异常,密码校验失败'));\r\n });\r\n },\r\n validateNewPasswordChk(rule, value, callback){\r\n let newPassword = this.updatePasswordForm.newPassword\r\n let newPasswordChk = this.updatePasswordForm.newPasswordChk\r\n if(newPasswordChk !== \"\" && newPassword !== newPasswordChk){\r\n callback(new Error('两次输入不同'));\r\n }else{\r\n callback();\r\n }\r\n },\r\n updatePasswordFunc(){\r\n this.$refs.updatePasswordForm.validate(valid => {\r\n if(valid === true){\r\n postJson(\"/mftcc-sys-server/sys/sysUser/updatePassword\",this.updatePasswordForm,true,reponse => {\r\n if(reponse.code === 0){\r\n this.$message({\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString:true,\r\n message: reponse.msg\r\n })\r\n this.signOut();\r\n }else{\r\n this.$alert(reponse.msg, this.$alertTitle, {\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true\r\n });\r\n }\r\n });\r\n }\r\n \r\n });\r\n }\r\n }\r\n}\r\n\r\n</script>\r\n<style>\r\n.mftcc-header .el-header, .el-footer {\r\n color: #333;\r\n text-align: center;\r\n display: flex;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n.mftcc-header .el-main {\r\n display: flex;\r\n color: #333;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n.mftcc-header .el-main>.pt{\r\n display: flex;\r\n width: 100%;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n}\r\nhtml,body,#app,.el-container.is-vertical{\r\n padding: 0px;\r\n margin: 0px;\r\n height: 100%;\r\n}\r\n.el-container{\r\n height: 100%;\r\n}\r\n.mftcc-header .menuCollapse{\r\n font-size: 28px;\r\n height: 100%;\r\n line-height: 60px;\r\n width: 60px;\r\n cursor: pointer;\r\n margin-right: 10px;\r\n}\r\n\r\n/* 头部个人信息样式 */\r\n.menu-user-content{\r\n padding: 0;\r\n background-color: #409EFF;\r\n width: 200px;\r\n margin-top: 5px !important;\r\n}\r\n.menu-user-content img{\r\n width: 55px;\r\n height: 55px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n color: #fff;\r\n}\r\n.menu-user-content .menu-user-title{\r\n padding: 20px;\r\n}\r\n.menu-user-content .menu-user-title p{\r\n color:#fff;\r\n margin: 0px 0 16px 0;\r\n display: inline-block;\r\n}\r\n.menu-user-content .popper__arrow{\r\n display: none;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message{\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:first-child{\r\n width:66.66%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:last-child{\r\n width:33.33%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-button{\r\n margin-top: 6%;\r\n width:100%;\r\n background-color: #4D4D4D;\r\n height: 45px;\r\n}\r\n.menu-user-content .menu-user-button button{\r\n background-color: #4D4D4D;\r\n font-size: 12px;\r\n width:calc(50% - 1px);\r\n float: left;\r\n border: none;\r\n margin-left: 0px;\r\n height:100%;\r\n padding: 0;\r\n}\r\n.menu-user-content .menu-user-button button:hover{\r\n background-color: #353535;\r\n}\r\n.menu-user-content .menu-user-button .el-divider{\r\n margin:0;\r\n width:2px;\r\n height: 14px;\r\n top: 14px;\r\n float: left;\r\n}\r\n.mftcc-header .menu-user{\r\n min-width: 200px;\r\n padding: 0px 15px;\r\n position: absolute;\r\n right: 20px;\r\n}\r\n.mftcc-header .menu-user .menu-user-info{\r\n height: 100%;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.mftcc-header .menu-user .menu-user-info img{\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 50%;\r\n margin-right: 12px;\r\n}\r\n.mftcc-header .menu-user .menu-user-info span{\r\n font-size: 14px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-header .el-header, .el-footer {\r\n color: #333;\r\n text-align: center;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n.mftcc-header .el-main {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n color: #333;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n.mftcc-header .el-main>.pt{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n width: 100%;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n}\r\nhtml,body,#app,.el-container.is-vertical{\r\n padding: 0px;\r\n margin: 0px;\r\n height: 100%;\r\n}\r\n.el-container{\r\n height: 100%;\r\n}\r\n.mftcc-header .menuCollapse{\r\n font-size: 28px;\r\n height: 100%;\r\n line-height: 60px;\r\n width: 60px;\r\n cursor: pointer;\r\n margin-right: 10px;\r\n}\r\n/* 头部个人信息样式 */\r\n.menu-user-content{\r\n padding: 0;\r\n background-color: #409EFF;\r\n width: 200px;\r\n margin-top: 5px !important;\r\n}\r\n.menu-user-content img{\r\n width: 55px;\r\n height: 55px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n color: #fff;\r\n}\r\n.menu-user-content .menu-user-title{\r\n padding: 20px;\r\n}\r\n.menu-user-content .menu-user-title p{\r\n color:#fff;\r\n margin: 0px 0 16px 0;\r\n display: inline-block;\r\n}\r\n.menu-user-content .popper__arrow{\r\n display: none;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message{\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:first-child{\r\n width:66.66%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:last-child{\r\n width:33.33%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-button{\r\n margin-top: 6%;\r\n width:100%;\r\n background-color: #4D4D4D;\r\n height: 45px;\r\n}\r\n.menu-user-content .menu-user-button button{\r\n background-color: #4D4D4D;\r\n font-size: 12px;\r\n width:calc(50% - 1px);\r\n float: left;\r\n border: none;\r\n margin-left: 0px;\r\n height:100%;\r\n padding: 0;\r\n}\r\n.menu-user-content .menu-user-button button:hover{\r\n background-color: #353535;\r\n}\r\n.menu-user-content .menu-user-button .el-divider{\r\n margin:0;\r\n width:2px;\r\n height: 14px;\r\n top: 14px;\r\n float: left;\r\n}\r\n.mftcc-header .menu-user{\r\n min-width: 200px;\r\n padding: 0px 15px;\r\n position: absolute;\r\n right: 20px;\r\n}\r\n.mftcc-header .menu-user .menu-user-info{\r\n height: 100%;\r\n width: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n}\r\n.mftcc-header .menu-user .menu-user-info img{\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 50%;\r\n margin-right: 12px;\r\n}\r\n.mftcc-header .menu-user .menu-user-info span{\r\n font-size: 14px;\r\n}\r\n",".mftcc-layout-header {\r\n width: 100%;\r\n height: 100%;\r\n border-bottom: 1px solid #dfdfdf;\r\n background: #409EFF;\r\n}\r\n.mftcc-layout-header .middle-north-center{\r\n height: 55px; \r\n /* width: 500px; */\r\n float: right; \r\n}\r\n.mftcc-layout-header .outer-west-logo{\r\n height:55px; \r\n width: 224px; \r\n float: left;\r\n}\r\n.mftcc-layout-header .outer-west-logo img{\r\n width: 224px;\r\n}\r\n.mftcc-layout-header .middle-north-west{\r\n float: left;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding-top: 5px;\r\n}\r\n.mftcc-layout-header .middle-north-west span{\r\n color: white;\r\n font-size: 20px;\r\n position: absolute;\r\n padding: 14px 0px 0px 17px;\r\n}\r\n.mftcc-layout-header .middle-north-west img{\r\n width: 214px;\r\n}\r\n.mftcc-layout-header .middle-north-east{\r\n cursor: pointer;\r\n width: 80px; \r\n float: right; \r\n background-color:#337ECC;\r\n height: 55px;\r\n}\r\n.mftcc-layout-header .middle-north-east i{\r\n font-size: 24px;\r\n color: white;\r\n padding: 15px 28px !important;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu{\r\n float: right;\r\n background-color: transparent;\r\n height: 55px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item{\r\n color: #fff;\r\n height: 55px;\r\n font-size: 14px;\r\n line-height: 25px;\r\n padding: 10px 15px;\r\n padding-top: 15px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item:focus,.mftcc-layout-header .mftcc-header-menu .el-menu-item:hover{\r\n background-color:rgba(0, 0, 0, 0.2);\r\n color: #fff;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item.is-active{\r\n background-color: rgba(0, 0, 0, 0.2);\r\n color: #fff;\r\n border-bottom: none;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item i{\r\n float: left;\r\n width: 25px;\r\n height: 25px;\r\n margin-top: 1px;\r\n margin-right: 5px;\r\n font-size: 24px;\r\n color: #fff;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user{\r\n min-width: 208px;\r\n padding: 0px 15px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info{\r\n height: 100%;\r\n width: 100%;\r\n display: flex;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info img{\r\n width: 35px;\r\n height: 35px;\r\n border-radius: 50%;\r\n margin-top: 10px;\r\n margin-right: 12px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info span{\r\n margin-top: 15px;\r\n}\r\n.menu-user-content{\r\n padding: 0;\r\n background-color: #4a7ec3;\r\n width: 190px;\r\n margin-top: 5px !important;\r\n}\r\n.menu-user-content img{\r\n width: 55px;\r\n height: 55px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n color: #fff;\r\n}\r\n.menu-user-content .menu-user-title{\r\n padding: 20px;\r\n}\r\n.menu-user-content .menu-user-title p{\r\n color:#fff;\r\n margin: 0px 0 16px 0;\r\n display: inline-block;\r\n}\r\n.menu-user-content .popper__arrow{\r\n display: none;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message{\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:first-child{\r\n width:66.66%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:last-child{\r\n width:33.33%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-button{\r\n margin-top: 6%;\r\n width:100%;\r\n background-color: #4D4D4D;\r\n height: 45px;\r\n border-bottom-left-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n}\r\n.menu-user-content .menu-user-button button{\r\n background-color: #4D4D4D !important;\r\n font-size: 12px;\r\n width: calc(50% - 1px) !important;\r\n float: left;\r\n border: none;\r\n margin-left: 0px !important;\r\n height: 100% !important;\r\n padding: 0;\r\n}\r\n.menu-user-content .menu-user-button button:hover{\r\n background-color: #353535;\r\n}\r\n.menu-user-content .menu-user-button .el-divider{\r\n margin:0;\r\n width:2px;\r\n height: 14px;\r\n top: 14px;\r\n float: left;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval{\r\n min-width: 120px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval .menu-approval-num{\r\n float: left;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval sup{\r\n background-color: #fff;\r\n color: #000;\r\n right: 0px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-notice sup{\r\n background-color: #fff;\r\n color: #000;\r\n}","/* @import \"../../../../assets/font/font.css\"; */\r\n.mftcc-layout-header {\r\n width: 100%;\r\n height: 100%;\r\n border-bottom: 1px solid #dfdfdf;\r\n background: #409EFF;\r\n}\r\n.mftcc-layout-header .middle-north-center{\r\n height: 55px; \r\n /* width: 500px; */\r\n float: right; \r\n}\r\n.mftcc-layout-header .outer-west-logo{\r\n height:55px; \r\n width: 224px; \r\n float: left;\r\n}\r\n.mftcc-layout-header .outer-west-logo img{\r\n width: 224px;\r\n}\r\n.mftcc-layout-header .middle-north-west{\r\n float: left;\r\n height: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n padding-top: 5px;\r\n}\r\n.mftcc-layout-header .middle-north-west span{\r\n color: white;\r\n font-size: 20px;\r\n position: absolute;\r\n padding: 14px 0px 0px 17px;\r\n}\r\n.mftcc-layout-header .middle-north-west img{\r\n width: 214px;\r\n}\r\n.mftcc-layout-header .middle-north-east{\r\n cursor: pointer;\r\n width: 80px; \r\n float: right; \r\n background-color:#337ECC;\r\n height: 55px;\r\n}\r\n.mftcc-layout-header .middle-north-east i{\r\n font-size: 24px;\r\n color: white;\r\n padding: 15px 28px !important;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu{\r\n float: right;\r\n background-color: transparent;\r\n height: 55px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item{\r\n color: #fff;\r\n height: 55px;\r\n font-size: 14px;\r\n line-height: 25px;\r\n padding: 10px 15px;\r\n padding-top: 15px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item:focus,.mftcc-layout-header .mftcc-header-menu .el-menu-item:hover{\r\n background-color:rgba(0, 0, 0, 0.2);\r\n color: #fff;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item.is-active{\r\n background-color: rgba(0, 0, 0, 0.2);\r\n color: #fff;\r\n border-bottom: none;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item i{\r\n float: left;\r\n width: 25px;\r\n height: 25px;\r\n margin-top: 1px;\r\n margin-right: 5px;\r\n font-size: 24px;\r\n color: #fff;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user{\r\n min-width: 208px;\r\n padding: 0px 15px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info{\r\n height: 100%;\r\n width: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info img{\r\n width: 35px;\r\n height: 35px;\r\n border-radius: 50%;\r\n margin-top: 10px;\r\n margin-right: 12px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info span{\r\n margin-top: 15px;\r\n}\r\n.menu-user-content{\r\n padding: 0;\r\n background-color: #4a7ec3;\r\n width: 190px;\r\n margin-top: 5px !important;\r\n}\r\n.menu-user-content img{\r\n width: 55px;\r\n height: 55px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n color: #fff;\r\n}\r\n.menu-user-content .menu-user-title{\r\n padding: 20px;\r\n}\r\n.menu-user-content .menu-user-title p{\r\n color:#fff;\r\n margin: 0px 0 16px 0;\r\n display: inline-block;\r\n}\r\n.menu-user-content .popper__arrow{\r\n display: none;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message{\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:first-child{\r\n width:66.66%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:last-child{\r\n width:33.33%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-button{\r\n margin-top: 6%;\r\n width:100%;\r\n background-color: #4D4D4D;\r\n height: 45px;\r\n border-bottom-left-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n}\r\n.menu-user-content .menu-user-button button{\r\n background-color: #4D4D4D !important;\r\n font-size: 12px;\r\n width: calc(50% - 1px) !important;\r\n float: left;\r\n border: none;\r\n margin-left: 0px !important;\r\n height: 100% !important;\r\n padding: 0;\r\n}\r\n.menu-user-content .menu-user-button button:hover{\r\n background-color: #353535;\r\n}\r\n.menu-user-content .menu-user-button .el-divider{\r\n margin:0;\r\n width:2px;\r\n height: 14px;\r\n top: 14px;\r\n float: left;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval{\r\n min-width: 120px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval .menu-approval-num{\r\n float: left;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval sup{\r\n background-color: #fff;\r\n color: #000;\r\n right: 0px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-notice sup{\r\n background-color: #fff;\r\n color: #000;\r\n}\r\n.mftcc-layout-menu {\r\n height: 100%;\r\n overflow-x: hidden;\r\n}\r\n.mftcc-layout-menu .menu{\r\n z-index: 100;\r\n width: 100px;\r\n min-height: 100%;\r\n overflow: hidden;\r\n background-color: #101D29;\r\n}\r\n.mftcc-layout-menu .el-scrollbar__bar {\r\n z-index: 101;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item{\r\n margin-bottom: 1px;\r\n padding: 0 !important;\r\n color: #fff;\r\n height: 60px;\r\n\twidth: 100px;\r\n line-height: initial;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -ms-flex-wrap: wrap;\r\n flex-wrap: wrap;\r\n\t-webkit-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tpadding-left:22px!important;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:hover{\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:focus{\r\n background: none;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item.is-active{\r\n position: relative;\r\n background: url(../../images/jiantou.png) no-repeat 0px -6px;\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item i{\r\n position: relative;\r\n top: 22px;\r\n display: block;\r\n font-family: 'Glyphicons Halflings';\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 1;\r\n color: #fff;\r\n font-size: 16px;\r\n width: 16px;\r\n\theight: 16px;\r\n\tfloat: left;\r\n margin: 0;\r\n\tmargin-right: 8px;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item span{\r\n font-size: 14px;\r\n text-align: center;\r\n display: block;\r\n width:auto;\r\n line-height: 60px;\r\n\tfloat: left;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu{\r\n background-color: rgb(255, 255, 255);\r\n height: calc(100% - 55px);\r\n width: 200px;\r\n position: absolute;\r\n top: 55px;\r\n left: 100px;\r\n -webkit-box-shadow: 4px 0px 4px #c0c4cc;\r\n box-shadow: 4px 0px 4px #c0c4cc;\r\n z-index: 99;\r\n overflow-y: auto;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-item{\r\n width: 90%;\r\n margin: 0 auto;\r\n border-bottom: 1px solid #F1F1F3;\r\n padding: 15px 0 15px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-mask{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute;\r\n left: 0;\r\n z-index: 98;\r\n top: 0;\r\n}\r\n.second-menu-title span{\r\n color: #333;\r\n width: 140px;\r\n text-align: left;\r\n font-size: 14px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 36px;\r\n padding-left: 15px;\r\n}\r\n.second-menu-title span:hover{\r\n color: #4a7ec3;\r\n}\r\n.three-menu-title:hover{\r\n color: #4a7ec3;\r\n}\r\n.three-menu-title {\r\n color: #333;\r\n text-align: left;\r\n font-size: 12px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 32px;\r\n margin-left: 25px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter-active,\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-active {\r\n -webkit-transition: all .3s ease;\r\n transition: all .3s ease;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter, .mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-to{\r\n -webkit-transform: translateX(-200px);\r\n transform: translateX(-200px);\r\n}\r\n/*table样式*/\r\n.mftcc-table{\r\n\t-webkit-box-flex: 1;\r\n\t -ms-flex-positive: 1;\r\n\t flex-grow: 1;\r\n\tmargin: 0 12px;\r\n\tmargin-bottom: 12px;\r\n}\r\n.mftcc-table .el-table .cell, .el-table--border td:first-child .cell, .el-table--border th:first-child .cell{\r\n\t padding-left: 16px;\r\n}\r\n/* .mftcc-table .el-table__body {\r\n background: white;\r\n border: none;\r\n} */\r\n/* .mftcc-table .el-table__body tr {\r\n line-height: 30px !important;\r\n height: 30px !important;\r\n border-bottom: none;\r\n}\r\n.mftcc-table .el-table__body tr:nth-child(even) {\r\n background: #f1f1f1;\r\n}\r\n.mftcc-table .el-table__body tr:nth-child(odd) {\r\n background: #fff;\r\n} */\r\n.mftcc-table .el-table__body tr td{\r\n\tfont-size: 14px;\r\n color: #3D3D3D;\r\n border: none;\r\n\tpadding:8px 0px;\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n/* .mftcc-table .el-table__body tr td:first-child{\r\n\tborder-left: 1px solid #E8E8E8;\r\n}\r\n.mftcc-table .el-table__body tr td:last-child{\r\n\tborder-right: 1px solid #E8E8E8;\r\n} */\r\n.mftcc-table .el-table__body tr:nth-child(even){\r\n\tbackground: #FAFAFA;\r\n}\r\n.mftcc-table .el-table__body tr td a,.mftcc-form .el-form-item a{\r\n\tcolor: #409EFF;\r\n text-decoration: none;\r\n}\r\n.mftcc-table .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n\tbackground: #E3F1FF;\r\n}\r\n.mftcc-form .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n background: transparent;\r\n}\r\n.mftcc-table .el-table__body tr.current-row>td{\r\n\tbackground: #E3F1FF;\r\n}\r\n.mftcc-table .el-form-item{\r\n margin-bottom: 0;\r\n}\r\n/* .mftcc-table .el-table__header {\r\n\tdisplay: block;\r\n\tz-index: 9;\r\n\tposition: absolute;\r\n\tbackground-color: #ffffff;\r\n\tborder:none;\r\n} */\r\n.mftcc-table .el-table th{\r\n\tcolor: #141414;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\t-webkit-box-sizing: border-box;\r\n\t box-sizing: border-box;\t\r\n \tpadding: 0 5px;\r\n\theight: 48px;\r\n line-height: 48px;\r\n /* text-align: center; */\r\n white-space: nowrap;\r\n\tcursor: default;\r\n\tbackground: #F5F5F5;\r\n\tborder-right: 1px solid #E8E8E8;\r\n border-top: 1px solid #E8E8E8;\r\n\tfont-weight: bold;\r\n}\r\n/* .mftcc-table .el-table th:first-child{\r\n\tborder-left:1px solid #E8E8E8;\r\n} */\r\n.mftcc-table .el-table th>.cell{\r\n display: block;\r\n padding-left: 14px;\r\n padding-right: 14px;\r\n}\r\n/*分页*/\r\n.mftcc-table .el-pagination{\r\n\t/* position: absolute;\r\n bottom: 4px; \r\n width: 100%;*/\r\n\tbackground: #FAFAFA;\r\n\tpadding: 0px;\r\n\ttext-align: right;\r\n\tpadding-right: 10px;\r\n\tmargin: 0px !important;\r\n\tpadding-left: 10px;\r\n\theight: 40px;\r\n}\r\n.mftcc-table .el-pagination .el-pagination__total,.mftcc-table .el-pagination .el-pagination__sizes{\r\n\tfloat: left;\r\n\tfont-size: 12px;\r\n}\r\n.mftcc-table .el-pagination.is-background .el-pager li:not(.disabled){\r\n\tcolor: #141414;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\theight: 40px;\r\n line-height: 40px;\r\n}\r\n.mftcc-table .el-pagination__editor.el-input{\r\n\tmargin: 0 5px;\r\n}\r\n.mftcc-table .el-pagination__editor.el-input .el-input__inner{\r\n\twidth: 48px;\r\n height: 28px;\r\n background: #FFFFFF;\r\n border-radius: 2px;\r\n border: 1px solid #E8E8E8;\r\n}\r\n.mftcc-table .el-input--mini .el-input__inner{\r\n\twidth: 84px;\r\n height: 28px;\r\n background: #FFFFFF;\r\n border-radius: 2px !important;\r\n border: 1px solid #E8E8E8;\r\n font-size: 12px;\r\n}\r\n.mftcc-table .el-pagination .el-pagination__jump{\r\n\tfont-size: 12px !important;\r\n color: #3D3D3D;\r\n}\r\n.mftcc-table .el-pagination button, .el-pagination span:not([class*=suffix]){\r\n\theight: 40px;\r\n line-height: 40px;\r\n}\r\n.el-pagination.is-background .btn-next, .el-pagination.is-background .btn-prev, .el-pagination.is-background .el-pager li{\r\n\tbackground-color: transparent;\r\n\tfont-size: 12px;\r\n\tcolor: #141414;\r\n\tmin-width: 25px;\r\n}\r\n.mftcc-table .el-pagination.is-background .el-pager li:not(.disabled).active{\r\n\tcolor: #409EFF;\r\n\tbackground: none;\r\n}\r\n.mftcc-table .is-disabled .el-input__inner,.mftcc-table .is-disabled .el-textarea__inner{\r\n\tbackground-color: #F5F7FA !important;\r\n border-color: #E4E7ED !important;\r\n color: #C0C4CC !important;\r\n cursor: not-allowed !important;\r\n}\r\n.mftcc-table .el-table__row .el-button--default{\r\n background: none;\r\n\tborder: none;\r\n\tcolor: #409EFF;\r\n\tpadding: 5px 0px;\r\n\tmin-width: auto;\r\n height: auto;\r\n}\r\n.mftcc-table .el-table__row .el-button--default:hover{\r\n background-color: transparent;\r\n}\r\n.mftcc-table .el-table__row .el-button--default:first-child{\r\n\tmargin-left: 0px;\r\n}\r\n.mftcc-table .el-table__row .el-button--default.is-disabled{\r\n\tcolor: #C0C4CC;\r\n\tcursor: pointer;\r\n}\r\n/* talbe样式结束 */\r\n/* 可编辑table样式开始 */\r\n.mftcc-edit-table{\r\n\tmargin: 0px 20px 0px 20px;\r\n \twidth: auto !important;\r\n}\r\n.mftcc-edit-table .el-table__body tr td{\r\n\tfont-size: 12px;\r\n color: #575757;\r\n border: 0px solid #e9ebf2;\r\n\tpadding:4px 0px;\r\n\tborder-bottom: 1px solid #eee;\r\n}\r\n.mftcc-edit-table .el-table__body tr td a{\r\n\t color: #4a7ec3;\r\n text-decoration: none;\r\n}\r\n.mftcc-edit-table .el-table__body tbody tr:hover {\r\n background-color: #d6f0f5 !important;\r\n}\r\n.mftcc-edit-table .el-table th{\r\n\tcolor: #7e8ea4;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\t-webkit-box-sizing: border-box;\r\n\t box-sizing: border-box;\t\r\n \tpadding: 0 5px;\r\n\theight: 41px;\r\n line-height: 41px;\r\n white-space: nowrap;\r\n\tcursor: default;\r\n\tbackground: #EDF2FA;\r\n\tborder:1px solid rgba(225,226,227,1);\r\n\tfont-weight: bold;\r\n}\r\n.mftcc-edit-table .el-table th>.cell{\r\n\tdisplay: block;\r\n}\r\n/*分页*/\r\n.mftcc-edit-table .el-pagination{\r\n\tbackground: #fff;\r\n\ttext-align: right;\r\n\tpadding-right: 10px;\r\n\tmargin-top: 10px !important;\r\n}\r\n.mftcc-edit-table .el-pagination .el-pagination__total,.mftcc-edit-table .el-pagination .el-pagination__sizes{\r\n\tfloat: left;\r\n}\r\n.mftcc-edit-table .el-pagination.is-background .el-pager li:not(.disabled).active{\r\n\tbackground: #4a7ec3;\r\n}\r\n.mftcc-edit-table .el-table__row .el-button--default{\r\n background: none;\r\n\tborder: none;\r\n\tcolor: #4a7ec3;\r\n\tpadding: 10px 0px;\r\n}\r\n.mftcc-edit-table .el-table__row .el-button--default.is-disabled{\r\n\tcolor: #C0C4CC;\r\n\tcursor: pointer;\r\n}\r\n/* 可编辑table样式结束 */\r\n/*表单样式*/\r\n.mftcc-form .el-form-item{\r\n\tmargin-bottom: 0;\r\n\tpadding-left: 0px !important;\r\n\tpadding-right: 0px !important;\r\n\tbackground: #F5F5F5;\r\n\theight: 100%;\r\n\tborder-right: 1px solid #E8E8E8;\r\n\tmin-height: 48px;\r\n}\r\n.mftcc-form .el-form-item.mftcc-form-empty{\r\n\tbackground: transparent;\r\n}\r\n.mftcc-form .el-form-item__label{\r\n\t/* width: 35% !important; */\r\n\tpadding: 3px 12px;\r\n line-height:34px;\r\n\tvertical-align: middle;\r\n\theight: 100%;\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n\t-webkit-box-align: center;\r\n\t -ms-flex-align: center;\r\n\t align-items: center;\r\n\tmargin-top: 0px;\r\n\tcolor: #141414;\r\n}\r\n.mftcc-form.el-form--label-right .el-form-item__label{\r\n\t-webkit-box-pack: end;\r\n\t -ms-flex-pack: end;\r\n\t justify-content: flex-end;\r\n}\r\n.mftcc-form .el-table__body tr td:first-child .el-form-item{\r\n\tborder-left: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form .el-form-item__content{\r\n\t/* margin-left: 35% !important; */\r\n\tbackground: #fff;\r\n\t/* border-right: 1px solid #E8E8E8; */\r\n\tborder-left: 1px solid #E8E8E8;\r\n\tposition: relative;\r\n\tright:1px;\r\n\t padding: 0px;\r\n\t height: 100%;\r\n}\r\n.mftcc-form.el-form--label-top .el-form-item__label{\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form.el-form--label-top .el-form-item__label,.mftcc-form.el-form--label-top .el-form-item__content{\r\n\theight: 50%;\r\n\tmin-height: 48px;\r\n}\r\n.mftcc-form .el-table__body td{\r\n\t border-top: 1px solid #E8E8E8;\r\n\t height: 0px;\r\n}\r\n.mftcc-form .el-table__body{\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form .mftcc-form-group .el-col .el-form-item__content{\r\n\tmargin: 0px !important;\r\n border: none;\r\n padding: 0px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item{\r\n\tbackground:none;\r\n}\r\n.mftcc-form .el-table__body td{\r\n\tbackground: #fff;\r\n}\r\n/* .mftcc-form .el-form-item.mftcc-form-empty,\r\n.mftcc-form .el-form-item.mftcc-form-empty .el-form-item__label,\r\n.mftcc-form .el-form-item.mftcc-form-empty .el-form-item__content{\r\n\tbackground:none;\r\n\tborder: none;\r\n} */\r\n.mftcc-form .el-date-editor.el-input, .mftcc-form .el-date-editor.el-input__inner {\r\n width: 100%;\r\n}\r\nsection.el-container{\r\n\tborder: none!important;\r\n}\r\n.mftcc-form .el-input__inner{\r\n\tborder: none;\r\n\theight: 100% !important;\r\n}\r\n.mftcc-form .el-textarea__inner{\r\n\tborder: none;\r\n\t/* height: 40px; */\r\n\toutline:none;\r\n\tresize:none;\r\n}\r\n.mftcc-form .el-checkbox-group,\r\n.mftcc-form .el-radio-group,\r\n.mftcc-form .el-switch{\r\n\tpadding: 0 15px;\r\n line-height: 25px;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.mftcc-form .el-input__suffix{\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n}\r\n.mftcc-form .el-radio{\r\n\tline-height: 34px;\r\n}\r\n.el-scrollbar__wrap{\r\n overflow: auto;\r\n margin: 0 !important;\r\n}\r\n.mftcc-form .el-alert--success.is-dark{\r\n\theight: 48px;\r\n\tpadding: 8px;\r\n\tborder-left: 1px solid #E8E8E8;\r\n\tborder-right: 1px solid #E8E8E8;\r\n\tborder-radius: 0;\r\n\tbackground: rgba(64, 158, 255, 0.15) !important;\r\n}\r\n.mftcc-form .el-alert--success.is-dark .el-alert__title{\r\n\tfont-size:14px;\r\n\tcolor:#141414;\r\n}\r\n.mftcc-form .el-form-item__error {\r\n\ttop: auto;\r\n left: auto;\r\n right: 16px;\r\n z-index: 99;\r\n bottom: 18px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item__error {\r\n\ttop: auto;\r\n left: 15px;\r\n z-index: 99;\r\n bottom: -13px;\r\n}\r\n.mftcc-form .el-table .cell{\r\n\tpadding: 0px;\r\n}\r\n.mftcc-form .el-table .cell,\r\n.mftcc-form .el-table .cell>div,\r\n.mftcc-form .mftcc-form-item,\r\n.mftcc-form .el-input,\r\n.mftcc-form .el-textarea,\r\n.mftcc-form .el-select,\r\n.mftcc-form .el-cascader,\r\n.mftcc-form .mftcc-dailog{\r\n\theight: 100%;\r\n}\r\n.mftcc-form .mftcc-dailog{\r\n width: 100%;\r\n}\r\n.mftcc-form .el-form-item__content .el-input{\r\n height: calc(100% - 4px);\r\n margin-top: 2px;\r\n\tborder: 1px solid transparent;\r\n}\r\n.mftcc-form .el-form-item__content .el-select .el-input,.mftcc-form .el-form-item__content .el-cascader .el-input{\r\n\tmargin-top: 0px;\r\n}\r\n.mftcc-form .el-form-item__content .el-textarea{\r\n\tborder: 1px solid transparent;\r\n}\r\n.mftcc-form .el-form-item__content .el-input.is-disabled,\r\n.mftcc-form .el-form-item__content .el-textarea.is-disabled,\r\n\r\n.mftcc-form .is-disabled .el-form-item__content .el-input,\r\n.mftcc-form .is-disabled .el-form-item__content .el-textarea{\r\n height: 100%;\r\n border: none !important;\r\n -webkit-box-shadow: none !important;\r\n box-shadow: none !important;\r\n}\r\n.mftcc-form .el-form-item__content>.el-select,.mftcc-form .el-form-item__content>.el-cascader,.mftcc-form .el-form-item__content>.mftcc-dailog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n}\r\n.mftcc-form .el-form-item__content .el-input:hover,\r\n.mftcc-form .el-form-item__content .el-textarea:hover{\r\n border: 1px solid #409EFF;\r\n -webkit-box-shadow: 0px 0px 5px 0px #409EFF;\r\n box-shadow: 0px 0px 5px 0px #409EFF;\r\n}\r\n.mftcc-form .el-form-item__content .el-select__tags,.mftcc-form .el-form-item__content .el-cascader__tags{\r\n pointer-events: none;\r\n}\r\n.mftcc-form .el-form-item__content .el-select__tags>span,.mftcc-form .el-form-item__content .el-cascader__tags>span{\r\n pointer-events: auto;\r\n}\r\n.mftcc-form .el-select .el-select__tags,.mftcc-form .el-cascader .el-cascader__tags{\r\n\tpadding: 5px 0;\r\n max-width: none !important;\r\n position: relative;\r\n height: 100%;\r\n}\r\n.mftcc-form .el-select .el-select__tags + .el-input,.mftcc-form .el-cascader>.el-input{\r\n position: absolute;\r\n top: 2px;\r\n left: 0px;\r\n}\r\n.mftcc-form .el-cascader .el-cascader__search-input{\r\n background-color: transparent;\r\n}\r\n/* 弹层table样式 */\r\n.mftcc-table-dialog .el-dialog__body{\r\n\tpadding-top: 10px;\r\n}\r\n.mftcc-table-dialog .mftcc-search-form{\r\n\tpadding: 0 20px;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content{\r\n\tpadding-top: 20px;\r\n}\r\n/* 弹层table样式结束 */\r\n/* 列表按钮样式开始 */\r\n.mftcc-form-buttom{\r\n\tpadding: 8px 12px;\r\n position: relative;\r\n\ttext-align: right;\r\n\tmargin: 0 12px;\r\n background: #FFF;\r\n}\r\n.mftcc-form-buttom.queryModel>span{\r\n\tfloat: left;\r\n font-size: 18px;\r\n line-height: 30px;\r\n display: block;\r\n}\r\n/* .mftcc-form-buttom button,.mftcc-form-tools button{\r\n\tbackground-color: #409EFF;\r\n color: #FFFFFF;\r\n border: none;\r\n\tborder-radius: 4px;\r\n\tmargin-left: 10px;\r\n\tmin-width: 68px;\r\n\theight: 32px;\r\n\tpadding: 0;\r\n} */\r\n.mftcc-form-buttom .sysBtns button,.mftcc-form-tools .sysBtns button{\r\n\tbackground-color: #fff;\r\n\tcolor: #409EFF;\r\n\tborder: 1px solid rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-form-buttom .sysBtns button:hover, .mftcc-form-tools .sysBtns button:hover{\r\n\tbackground: rgba(64, 158, 255, 0.15);\r\n\tborder-radius: 4px;\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .mftcc-form-tools-item{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n}\r\n.mftcc-form-buttom>button:first-child{\r\n\tmargin-left: 0px;\r\n}\r\n.mftcc-form-buttom.queryModel .sysBtns{\r\n\tdisplay: inline-block;\r\n\tmargin-right: 20px;\r\n}\r\n.mftcc-form-buttom.dynamicModel{\r\n\ttext-align: left;\r\n\tmargin-bottom: 1px;\r\n\tmargin-top: 12px;\r\n}\r\n/* .mftcc-form-buttom.dynamicModel button{\r\n\tpadding: 6px 12px;\r\n\tpadding-left: 20px;\r\n background-color: #4A7EC3;\r\n\tbackground:#4A7EC3 url(../../images/Group23.png) no-repeat 8px center ;\r\n color: #FFFFFF;\r\n\theight: 28px;\r\n\twidth: 68px;\r\n\ttext-align: center;\r\n\tmargin-left: 0;\r\n margin-right: 10px;\r\n} */\r\n/* .mftcc-form-buttom.dynamicModel button:hover{\r\n\t background-color: #36629C;\r\n} */\r\n/* 列表按钮样式结束 */\r\n/* 列表工具栏样式开始 */\r\n.mftcc-form-tools{\r\n\tpadding: 8px 12px;\r\n position: relative;\r\n\tmargin: 0 12px;\r\n\tbackground: #FFF;\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n}\r\n.mftcc-form-tools>.mftcc-form-tools-item>div{\r\n\tdisplay: inline-block;\r\n}\r\n.mftcc-form-tools .el-tabs__header{\r\n\tmargin: 0;\r\n}\r\n.mftcc-form-tools .el-tabs__item{\r\n\tpadding: 0px 12px;\r\n text-align: center;\r\n\tfont-size: 14px;\r\n\tcolor: #3D3D3D;\r\n}\r\n.mftcc-form-tools .el-tabs__item:hover{\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__item.is-active{\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__active-bar{\r\n\tbackground-color: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__nav-wrap::after{\r\n\theight: 0px;\r\n}\r\n.mftcc-form-tools .el-input__inner{\r\n\twidth: 230px;\r\n height: 32px;\r\n background: #FFFFFF;\r\n border-radius: 2px;\r\n border: 1px solid #CCCCCC;\r\n line-height: 32px;\r\n}\r\n.mftcc-form-tools .el-input__inner:hover{\r\n\tborder: 1px solid #409EFF;\r\n}\r\n.mftcc-form-tools .el-input__suffix{\r\n\twidth: 30px;\r\n height: 30px;\r\n background: rgba(64, 158, 255, 0.15);\r\n border-radius: 0px 2px 2px 0px;\r\n border: 1px solid rgba(64, 158, 255, 0.45);\r\n margin-right: -5px;\r\n font-size: 12px;\r\n color: #409EFF;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n\t-webkit-box-align: center;\r\n\t -ms-flex-align: center;\r\n\t align-items: center;\r\n\tcursor: pointer;\r\n}\r\n.mftcc-form-tools .el-input__icon.el-icon-search{\r\n\tcursor: pointer;\r\n}\r\n.mftcc-form-tools .el-input__icon.el-input__validateIcon{\r\n\tdisplay: none;\r\n}\r\n/* 列表工具栏样式结束 */\r\n.mftcc-details .el-card__body{\r\n padding: 12px;\r\n}\r\n/*单独显示label开始 */\r\n.mftcc-form-item .only-label .el-form-item__label{\r\n width: 100%!important;\r\n}\r\n.mftcc-form-item .only-label .el-form-item__content{\r\n display: none;\r\n}\r\n/*单独显示label结束 */\r\n/*单独显示input开始 */\r\n.mftcc-form-item .only-input .el-form-item__label{\r\n display: none;\r\n}\r\n.mftcc-form-item .only-input .el-form-item__content{\r\n width: 100%!important;\r\n margin-left:0px!important;\r\n}\r\n/*单独显示input结束 */\r\n.mftcc-form-item .mftcc-form-empty .el-form-item__label{\r\n display: none;\r\n}\r\n.mftcc-form-item .mftcc-form-empty .el-form-item__content{\r\n display: none;\r\n}\r\n/* tooltip样式 开始*/\r\n.el-tooltip__popper.is-dark{\r\n color: #3D3D3D;\r\n -webkit-box-shadow: 0px 0px 4px 0px #409eff;\r\n box-shadow: 0px 0px 4px 0px #409eff;\r\n background: #e3f1ff;\r\n line-height: 24px;\r\n font-size: 14px;\r\n}\r\n.el-tooltip__popper[x-placement^=top] .popper__arrow{\r\n border-top-color: rgb(64 158 255 / 47%);\r\n}\r\n.el-tooltip__popper[x-placement^=top] .popper__arrow::after{\r\n border-top-color: #e3f1ff;\r\n}\r\n/* tooltip样式 结束*/\r\n/*table样式*/\r\n/* .mftcc-table-query .el-table__body {\r\n background: white;\r\n table-layout: auto;\r\n padding-top: 48px;\r\n} */\r\n/* .mftcc-table-query .el-table__body tr {\r\n height: 41px;\r\n line-height: 41px;\r\n font-size: 14px;\r\n color: #7f7f7f;\r\n background: #ffffff;\r\n border-bottom: 1px solid #f3f3f3;\r\n} */\r\n.mftcc-table-query .el-table__body tr td{\r\n border: none !important;\r\n padding: 0px 0px !important;\r\n line-height: 41px;\r\n vertical-align: center;\r\n color: #3d3d3d;\r\n}\r\n.mftcc-table-query .el-table__body tr:nth-child(even) td{\r\nbackground: #fafafa;\r\n}\r\n.mftcc-table-query .el-table__body tr td a{\r\n color: #4a7ec3;\r\n text-decoration: none;\r\n}\r\n.mftcc-table-query .el-table--enable-row-hover .el-table__body tr:hover>td,\r\n.mftcc-table-query .el-table__body tr.hover-row.current-row>td, \r\n.mftcc-table-query .el-table__body tr.hover-row.el-table__row--striped.current-row>td, \r\n.mftcc-table-query .el-table__body tr.hover-row.el-table__row--striped>td, \r\n.mftcc-table-query .el-table__body tr.hover-row>td{\r\nbackground-color: #E3F2FD !important;\r\n}\r\n/* .mftcc-table-query .el-table__header {\r\ndisplay: block;\r\nz-index: 9;\r\nposition: absolute;\r\nbackground-color: #ffffff;\r\n} */\r\n.mftcc-table-query .el-table tr{\r\nheight: 36px;\r\n line-height: 36px;\r\n border-bottom: 1px solid #e9ebf2;\r\n color: #000000;\r\n}\r\n/* .mftcc-table-query .el-table tr:hover th{\r\n background-color: #E3F2FD !important;\r\n} */\r\n.mftcc-table-query .el-table th{\r\nfont-size: 14px;\r\n font-weight: normal;\r\n color: #3D3D3D;\r\n padding: 0px;\r\n background-color: rgba(64, 158, 255, 0.06);\r\nborder:none;\r\n \r\n}\r\n.mftcc-table-query .el-dropdown-DColumn{\r\n position: absolute;\r\n z-index: 10;\r\n top: 10px;\r\n right: 5px;\r\n}\r\n/*分页*/\r\n.mftcc-table-query .el-pagination{\r\n/* position: absolute;\r\n bottom: 4px; \r\n width: 100%;*/\r\nbackground: #fff;\r\n/* padding: 0px; */\r\ntext-align: right;\r\npadding-right: 10px;\r\nmargin-top: 10px !important;\r\n}\r\n.mftcc-table-query .el-pagination .el-pagination__total,.mftcc-table-query .el-pagination .el-pagination__sizes{\r\nfloat: left;\r\n}\r\n.mftcc-table-query .el-pagination.is-background .el-pager li:not(.disabled).active{\r\nbackground: #4a7ec3;\r\n}\r\n.mftcc-table-query .el-table__row .el-button--default{\r\nbackground-color: transparent !important;\r\nborder: none;\r\ncolor: #409EFF;\r\npadding: 10px 0px;\r\n}\r\n/*表单样式*/\r\n.mftcc-form-query .el-form-item{\r\nmargin-bottom: 0px;\r\npadding-left: 0px !important;\r\n padding-right: 0px !important;\r\n}\r\n.mftcc-form-query .el-col{\r\n background: #fff;\r\n}\r\n/* .mftcc-form-query .el-col:nth-child(4n+1),.mftcc-form-query .el-col:nth-child(4n+1){\r\n clear:left;\r\n} */\r\nsection.el-container{\r\nborder: none!important;\r\n}\r\n.mftcc-form-query .el-input.is-disabled .el-input__inner{\r\nborder: none;\r\nbackground: none;\r\n color: #666;\r\n cursor: text;\r\n line-height: 20px;\r\n height: 20px;\r\n padding: 0 10px;\r\n}\r\n.mftcc-form-query .el-form-item__content,.mftcc-form-query .el-form-item__label{\r\npadding-left: 10px;\r\nwidth: 100%;\r\nline-height: 36px;\r\nheight: 36px;\r\nborder-bottom: none;\r\n}\r\n.mftcc-form-query .el-table__body{\r\nborder: none;\r\nborder-bottom: 0;\r\n}\r\n.mftcc-form-query .el-table__body .el-alert--success.is-dark{\r\nbackground: #EDF2FA;\r\nmargin-bottom: 0 !important;\r\nborder-bottom: 1px solid #E1E2E3;\r\nborder-right:1px solid #E1E2E3;\r\nborder-left:1px solid #E1E2E3;\r\nborder-radius: 0;\r\nposition: relative;\r\nleft: 1px;\r\ncolor: #3D3D3D;\r\n\r\n}\r\n.mftcc-table-query .el-table__header,.mftcc-table-query .el-table__body{\r\nborder: none;\r\n}\r\n.mftcc-form-query .el-table__body tr:last-child td .el-form-item__content:last-child,.mftcc-form-query .el-table__body tr:last-child td .el-form-item__content:last-child .el-form-item__label{\r\nborder-bottom: 0;\r\n}\r\n/* .mftcc-form-query .el-table__body td:last-child{\r\nborder-right: 1px solid #E1E2E3;\r\nposition: relative;right: 2px;\r\n} */\r\n.mftcc-form-query .el-checkbox.is-disabled,.mftcc-form-query .el-radio.is-disabled{\r\ndisplay: none;\r\nmargin-right: 0;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked,.mftcc-form-query .el-radio.is-disabled.is-checked{\r\ndisplay: inline-block;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__input,.mftcc-form-query .el-radio.is-disabled.is-checked .el-radio__input{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__label,.mftcc-form-query .el-radio.is-disabled.is-checked .el-radio__label{\r\ndisplay: block;\r\ncolor: #666;\r\ncursor: text;\r\npadding-left: 0;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__label:after{\r\ncontent: \"|\";\r\nmargin: 0 6px;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled[class~='is-checked']:last-of-type .el-checkbox__label:after{\r\ncontent: \"\";\r\n}\r\n.mftcc-form-query .el-textarea__inner{\r\nborder: none;\r\nresize: none;\r\n}\r\n.mftcc-form-query .el-input.is-disabled .el-input__icon{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-input--prefix .el-input__inner{\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-radio{\r\nline-height: 34px;\r\n}\r\n.mftcc-form-query .el-checkbox-group,.mftcc-form-query .el-radio-group{\r\npadding-left: 10px;\r\n}\r\n.el-scrollbar__wrap{\r\noverflow: auto;\r\n}\r\n.mftcc-form-query.el-form--label-top .el-form-item__label{\r\nposition: relative;\r\nline-height: 36px;\r\npadding-bottom: 0;\r\npadding-left: 10px;\r\nwidth: 100%;\r\nbackground: #FAFAFA;\r\nborder-bottom: none;\r\ncolor: #3D3D3D;\r\n\r\n}\r\n.mftcc-form-query .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n background-color: transparent !important;\r\n}\r\n.mftcc-form-query.el-form--label-top .el-form-item__label\r\n.mftcc-form-query.el-form--label-top .el-form-item__label:before{\r\nleft: 0px!important;\r\nposition: absolute;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled:after{\r\ncontent: \"否\";\r\ncolor: #666;\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled{\r\nopacity: 1;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled.is-checked:after{\r\ncontent: \"是\";\r\n}\r\n.mftcc-form-query .el-switch.is-disabled .el-switch__core{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-textarea.is-disabled .el-textarea__inner{\r\nbackground: none;\r\ncursor: text;\r\n}\r\n.mftcc-form-query .el-form-item__content{\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-form-item__content span{\r\npadding-right: 20px;\r\ndisplay: block;\r\ncolor: #3D3D3D;\r\noverflow: hidden;\r\n text-overflow: ellipsis;\r\nwhite-space: nowrap;\r\n}\r\n.mftcc-form-query .el-table .cell{\r\npadding: 0px;\r\nheight: 100%;\r\n}\r\n.mftcc-form-search{\r\n padding: 8px 12px;\r\n margin: 12px;\r\n margin-bottom: 1px;\r\n background-color: #FFF;\r\n width: auto;\r\n}\r\n.mftcc-form-search .el-form-item {\r\n margin-bottom: 0px;\r\n}\r\n.mftcc-form-search .el-form-item__content input{\r\n\theight: 34px;\r\n}\r\n.mftcc-form-search .el-range-editor .el-range-input{\r\n height: 32px;\r\n}\r\n.mftcc-form-search .el-date-editor .el-range-separator{\r\n height: 34px;\r\n line-height: 34px;\r\n white-space: nowrap;\r\n}\r\n.mftcc-form-search .el-date-editor .el-range__close-icon{\r\n display: none;\r\n}\r\n.mftcc-form-search .el-form-item__label{\r\n width: 35% !important;\r\n}\r\n.mftcc-form-search .el-form-item__content{\r\n\tmargin-left: 35% !important;\r\n}\r\n.mftcc-form-search .el-date-editor{\r\n width: 100%;\r\n}\r\n.mftcc-form-search .el-table .cell{\r\n\tpadding: 0px;\r\n}\r\n.mftcc-form-search .widgets{\r\n padding: 0px;\r\n margin: 0;\r\n}\r\n.mftcc-form-search .search-button button {\r\n background-color: #409EFF;\r\n border: none;\r\n border-radius: 0px;\r\n height: 100%;\r\n float: right;\r\n padding: 10px 20px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table .isExpand.el-table--enable-row-hover .mftcc-form-expand .el-table__body tr:hover>td{\r\n background: #F3F9FF;\r\n}\r\n.mftcc-table .isExpand .mftcc-form-expand .el-table__body tr:nth-child(even){\r\n background: none;\r\n}\r\n.mftcc-table .isExpand .mftcc-form-expand .el-table__body tr td{\r\n border:none;\r\n}\r\n/* .mftcc-table .mftcc-form-expand .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{\r\n content:\"\"\r\n} */\r\n.mftcc-table .isExpand .el-form-item__label{\r\n color: #99a9bf;\r\n}\r\n.mftcc-table .isExpand .el-form-item__content{\r\n color: #606266;\r\n padding-left: 12px;\r\n}\r\n.mftcc-table .isExpand .el-table__expanded-cell:hover{\r\n background-color: #FFFFFF !important;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-form-item__label{\r\n line-height: 30px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input__inner,.mftcc-table .isExpand .expandEditForm .el-input__icon,.mftcc-table .isExpand .expandEditForm .el-form-item__content{\r\n height: 30px;\r\n line-height: 30px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input,.mftcc-table .isExpand .expandEditForm .el-textarea{\r\n width: 250px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-table__body tr td{\r\n padding: 4px 0;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-tag--small{\r\n height: 20px;\r\n line-height: 20px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-select .el-tag__close.el-icon-close{\r\n top: -1px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input__inner:hover, .mftcc-table .isExpand .expandEditForm .el-textarea__inner:hover, .mftcc-table .isExpand .expandEditForm .el-select:hover .el-input__inner {\r\n border: 1px solid #409EFF;\r\n -webkit-box-shadow: 0px 0px 5px 0px #409EFF;\r\n box-shadow: 0px 0px 5px 0px #409EFF;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-form-item__error{\r\n top: 5px;\r\n left: 275px;\r\n}\r\nbody,\r\ntd,\r\nth {\r\n font-family: \"Helvetica Neue\", Helvetica, \"PingFang SC\", \"Hiragino Sans GB\",\r\n \"Microsoft YaHei\", \"微软雅黑\", Arial, sans-serif;\r\n}\r\n.el-header,\r\n.el-footer {\r\n color: #333;\r\n text-align: center;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n.el-main {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n color: #333;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n height: 100%;\r\n padding: 0px;\r\n}\r\n.el-main > .pt,\r\n#app > .pt {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n width: 100%;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\nhtml,\r\nbody,\r\n#app,\r\n.el-container.is-vertical {\r\n padding: 0px;\r\n margin: 0px;\r\n height: 100%;\r\n overflow: hidden;\r\n}\r\n.el-loading-mask.is-fullscreen {\r\n z-index: 9999 !important;\r\n}\r\n#app {\r\n overflow: auto;\r\n}\r\n.el-container {\r\n height: 100%;\r\n}\r\n.el-container.mftcc-main-el-containner {\r\n height: calc(100% - 55px) !important;\r\n}\r\n/* 悬浮菜单 开始 */\r\n.mftcc-fixed-drawer {\r\n top: 55px;\r\n}\r\n.mftcc-fixed-drawer .el-drawer__header {\r\n padding: 0;\r\n}\r\n.mftcc-fixed-drawer .mftcc-fixed-menu-mark {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.mftcc-fixed-drawer .mftcc-main-drawer {\r\n width: 80px;\r\n background-color: #ffffff;\r\n -webkit-box-shadow: -4px 0px 8px 4px rgba(0, 0, 0, 0.08);\r\n box-shadow: -4px 0px 8px 4px rgba(0, 0, 0, 0.08);\r\n}\r\n.mftcc-fixed-drawer .mftcc-main-drawer .mftcc-fixed-menu {\r\n display: block;\r\n top: 10px;\r\n position: absolute;\r\n height: 100%;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item {\r\n width: 80px;\r\n height: 70px;\r\n margin: 5px 0px;\r\n position: relative;\r\n font-size: 14px;\r\n color: #141414;\r\n text-align: center;\r\n cursor: pointer;\r\n border-bottom: 1px solid #e8e8e8;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item:hover {\r\n color: #409eff;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item\r\n i {\r\n margin: 0px 10px;\r\n height: 30px;\r\n line-height: 30px;\r\n font-size: 20px;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item\r\n span {\r\n display: block;\r\n}\r\n/* 悬浮菜单 结束*/\r\n/* 悬浮菜单进入动画 开始 */\r\n/* .mftcc-fixed-menu-transition-enter-active {\r\n transition: all .50s ease;\r\n}\r\n.mftcc-fixed-menu-transition-enter {\r\n transform: translateX(80px);\r\n} */\r\n.mftcc-fixed-menu-transition-enter-active {\r\n -webkit-transition: right 0.5s ease;\r\n transition: right 0.5s ease;\r\n}\r\n.mftcc-fixed-menu-transition-enter {\r\n right: -80px;\r\n}\r\n.mftcc-fixed-menu-transition-enter-to {\r\n right: 0px;\r\n}\r\n/* 悬浮菜单进入动画 结束*/\r\n/* 动态列表页面样式开始 */\r\n.mftcc-list .mftcc-dynamic-insert-div {\r\n padding: 10px;\r\n border-bottom: 1px solid #ddd;\r\n}\r\n.mftcc-list .mftcc-dynamic-insert-div .el-button--primary {\r\n padding: 6px 10px;\r\n}\r\n.mftcc-list .dynamic-table {\r\n margin: 0;\r\n}\r\n/* 动态列表页面样式开始 */\r\n/* 列表页面样式开始 */\r\n.mftcc-list {\r\n background-color: #f2f2f4;\r\n}\r\n.mftcc-list .mftcc-dynamic-form {\r\n padding: 0;\r\n padding-bottom: 20px;\r\n margin: 0px 10px;\r\n background: none;\r\n}\r\n.mftcc-list .mftcc-search-form {\r\n padding: 20px 20px;\r\n margin: 10px 10px;\r\n background-color: #fff;\r\n}\r\n.mftcc-list .mftcc-search-form .el-row {\r\n width: 100%;\r\n}\r\n.mftcc-list .mftcc-list-table {\r\n background-color: #fff;\r\n margin: 0 10px 10px;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div {\r\n padding: 14px 0px 14px 20px;\r\n /* \tborder-bottom: 1px solid #e3e3e3; */\r\n position: relative;\r\n text-align: right;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div > span {\r\n float: left;\r\n font-size: 18px;\r\n line-height: 30px;\r\n display: block;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div .mftcc-insert-button {\r\n background-color: #fff;\r\n border-radius: 0px;\r\n color: #aaa;\r\n height: 36px;\r\n border: 1px solid #ddd;\r\n padding: 6px 18px;\r\n margin-right: 22px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-list .mftcc-search-form .search-button button {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n border-radius: 0px;\r\n height: 100%;\r\n float: right;\r\n padding: 10px 20px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-list .mftcc-search-form .custom-search {\r\n width: 100%;\r\n}\r\n/* 列表页面样式结束 */\r\n.mftcc-form-header {\r\n font-size: 14px;\r\n width: 100%;\r\n padding-top: 0;\r\n background: #fff;\r\n line-height: 46px;\r\n text-align: left;\r\n padding-left: 15px;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n border-bottom: 1px solid #e8e8e8;\r\n color: #141414;\r\n}\r\n.mftcc-tab .mftcc-container .mftcc-form-header {\r\n border: none;\r\n}\r\n.mftcc-tab .el-tabs__header {\r\n margin-bottom: 5px;\r\n}\r\n/* 按钮样式开始 */\r\n.el-button--primary {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n border-radius: 0px;\r\n padding: 10px 20px;\r\n}\r\n.el-button--primary:hover {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n}\r\n.el-button--default {\r\n border-radius: 0px;\r\n padding: 10px 20px;\r\n}\r\n/* 按钮样式结束 */\r\n/*tab样式开始*/\r\n.mftcc-tab {\r\n height: calc(100% - 50px);\r\n}\r\n.mftcc-tab .el-tabs.el-tabs--top {\r\n height: calc(100% - 58px);\r\n}\r\n/* 头部全局样式开始 */\r\n.el-page-header {\r\n padding-left: 10px;\r\n line-height: 50px;\r\n border-bottom: 1px solid #e1e2e3;\r\n color: #666;\r\n}\r\n.el-page-header__left::after {\r\n width: 0;\r\n}\r\n/* 头部全局样式结束 */\r\n.mftcc-tab .el-tabs__nav-wrap {\r\n padding: 0 10px;\r\n}\r\n.mftcc-tab .el-tabs__item.is-active {\r\n color: #4a7ec3;\r\n font-size: 14px;\r\n padding: 0 20px !important;\r\n top: 0;\r\n}\r\n.mftcc-tab .el-tabs__active-bar {\r\n background-color: #4a7ec3;\r\n padding: 0 20px;\r\n left: -20px;\r\n bottom: 0px;\r\n}\r\n.mftcc-tab .el-tabs__item {\r\n font-size: 12px;\r\n padding: 0 20px !important;\r\n top: 0px;\r\n height: 30px;\r\n line-height: 30px;\r\n}\r\n.mftcc-tab .el-tabs__nav-wrap::after {\r\n height: 0;\r\n}\r\n.mftcc-tab .el-tabs__content {\r\n padding: 0 10px;\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.mftcc-tab .el-tabs__content .el-tab-pane {\r\n border: none;\r\n -webkit-box-shadow: none;\r\n box-shadow: none;\r\n min-height: calc(100% - 10px);\r\n}\r\n.mftcc-tab .mftcc-list .mftcc-search-form {\r\n margin: 10px 0px;\r\n}\r\n.mftcc-tab .mftcc-list .mftcc-list-table {\r\n margin: 0 0 10px;\r\n}\r\n.mftcc-form-tips {\r\n line-height: 40px;\r\n font-size: 12px;\r\n color: #e72b00;\r\n width: 70%;\r\n margin: 0 auto;\r\n padding-left: 40px;\r\n}\r\n/*tab样式结束*/\r\n/*滚动条样式*/\r\n::-webkit-scrollbar {\r\n /*滚动条整体样式*/\r\n width: 8px; /*高宽分别对应横竖滚动条的尺寸*/\r\n height: 8px;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n /*滚动条里面小方块*/\r\n border-radius: 5px;\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n background: rgba(0, 0, 0, 0.2);\r\n}\r\n::-webkit-scrollbar-track {\r\n /*滚动条里面轨道*/\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n border-radius: 0;\r\n background: rgba(0, 0, 0, 0.1);\r\n}\r\n/* 滚动条样式结束 */\r\n/* 详情页面样式开始 */\r\n.mftcc-details {\r\n background-color: #f2f2f4;\r\n padding: 10px;\r\n /* min-height: 100%; */\r\n /* display: table; \r\n width: 100%;*/\r\n}\r\n.mftcc-details .mftcc-details-card {\r\n background-color: #fff;\r\n min-height: 130px;\r\n margin-bottom: 10px;\r\n padding: 10px;\r\n}\r\n.mftcc-details .mftcc-details-card .mftcc-details-header {\r\n margin-bottom: 2px;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info {\r\n min-height: 200px; /* \r\n background-color: #F8F9FC; */\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-tag--dark.el-tag--success,\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-button--mini,\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-tag--medium {\r\n height: 24px;\r\n line-height: 22px;\r\n padding: 0 16px;\r\n border-radius: 16px;\r\n text-align: center;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .mftcc-details-header-img {\r\n text-align: center;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .mftcc-details-header-img\r\n img {\r\n height: 132px;\r\n width: 132px;\r\n border-radius: 50%;\r\n margin-top: 20px;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom {\r\n height: 32px;\r\n background-color: #e0f4f7;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: end;\r\n -ms-flex-pack: end;\r\n justify-content: flex-end;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom\r\n button {\r\n border: none;\r\n background: none;\r\n margin: 0px;\r\n padding: 0px 10px;\r\n font-size: 14px;\r\n font-weight: 400;\r\n color: #4a7ec3;\r\n height: 100%;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom\r\n button:hover {\r\n color: #4a7ec3;\r\n background-color: #d0e9ed;\r\n border-color: #adadad;\r\n}\r\n.mftcc-details .el-collapse {\r\n border: none;\r\n}\r\n.mftcc-details .el-collapse-item {\r\n margin-bottom: 0;\r\n}\r\n.mftcc-details .el-collapse-item .el-collapse-item__content {\r\n padding-bottom: 0px;\r\n}\r\n.mftcc-details .el-collapse-item__header {\r\n height: 40px;\r\n border-bottom: 0;\r\n background: rgba(64, 158, 255, 0.15);\r\n}\r\n.mftcc-details .el-collapse-item__wrap {\r\n padding: 0;\r\n border: none;\r\n}\r\n.mftcc-details .mftcc-collapse-title {\r\n width: calc(100% - 3px);\r\n height: 37px;\r\n margin-left: 15px;\r\n line-height: 37px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n position: relative;\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-arrow-up:before {\r\n content: url(../../images/slideClose.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-arrow-down:before {\r\n content: url(../../images/slideOpen.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-plus:before {\r\n content: url(../../images/plus.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-edit-outline {\r\n position: absolute;\r\n right: 30px;\r\n top: 10px;\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-edit-outline:before {\r\n content: \"编辑\";\r\n color: #409eff;\r\n font-size: 14px;\r\n}\r\n.mftcc-details .mftcc-collapse-info {\r\n /* min-height: 200px; */\r\n}\r\n.mftcc-details .mftcc-collapse-table-info {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n}\r\n.mftcc-details .mftcc-collapse-title i:first-child {\r\n color: #409eff;\r\n margin-left: 0px;\r\n margin-right: 0;\r\n position: relative;\r\n top: 2px;\r\n font-size: 22px;\r\n}\r\n.mftcc-details .mftcc-collapse-title i:last-child {\r\n font-size: 20px;\r\n float: right;\r\n margin-top: 9px;\r\n margin-right: 10px;\r\n}\r\n.mftcc-details .el-collapse-item__arrow {\r\n display: none;\r\n}\r\n/* 详情页面样式结束 */\r\n/* 基础增改查看页面样式开始 */\r\n.mftcc-container .el-container {\r\n border: none !important;\r\n width: 70%;\r\n margin: 0px auto;\r\n padding: 0px 20px 80px;\r\n}\r\n.mftcc-container .el-header {\r\n height: auto !important;\r\n}\r\n.mftcc-container .mftcc-container-button {\r\n position: fixed;\r\n bottom: 10px;\r\n width: calc(100% - 20px) !important;\r\n left: 10px !important;\r\n background-color: #fafafa;\r\n height: 50px;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n z-index: 100;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n/* .mftcc-container .mftcc-container-button .el-button.el-button--primary,.mftcc-container .mftcc-container-button .el-button.el-button--default {\r\n background: #4a71e3;\r\n border: 1px solid #E1E2E3;\r\n width: 100px;\r\n line-height: 32px;\r\n font-size: 14px;\r\n color: #fff;\r\n padding: 0;\r\n cursor: pointer;\r\n}\r\n.mftcc-container .mftcc-container-button .el-button.el-button--primary:hover,.mftcc-container .mftcc-container-button .el-button.el-button--default:hover {\r\n\tbackground: #36629c;\r\n} */\r\n.mftcc-container .mftcc-container-button .el-button.el-button--default {\r\n background: #ffffff !important;\r\n color: #3d3d3d !important;\r\n border: 1px solid #cccccc !important;\r\n margin-left: 10px;\r\n}\r\n.mftcc-container .el-row {\r\n width: 100%;\r\n}\r\n/* 基础增改查看页面样式结束 */\r\n/* 公共样式 */\r\nbutton.el-button.el-button--primary {\r\n background-color: #409eff;\r\n color: #ffffff;\r\n border: none;\r\n border-radius: 4px;\r\n margin-left: 10px;\r\n min-width: 68px;\r\n height: 32px;\r\n padding: 0 15px;\r\n}\r\nbutton.el-button.el-button--default {\r\n color: #3d3d3d;\r\n background-color: #fff;\r\n border: 1px solid #cccccc;\r\n border-radius: 4px;\r\n margin-left: 10px;\r\n min-width: 68px;\r\n height: 32px;\r\n padding: 0 15px;\r\n}\r\nbutton.el-button.el-button--primary:focus,\r\nbutton.el-button.el-button--primary:hover {\r\n background-color: #5cacff;\r\n color: #ffffff;\r\n}\r\nbutton.el-button.el-button--primary:active {\r\n background-color: #3686d9;\r\n color: #bac8d9;\r\n}\r\nbutton.el-button.el-button--default:focus,\r\nbutton.el-button.el-button--default:hover {\r\n background-color: #fff;\r\n color: #409eff;\r\n border-color: #409eff38;\r\n}\r\nbutton.el-button.el-button--default:active {\r\n border-color: #409eff;\r\n}\r\n.mftcc-form .el-input.is-disabled .el-input__inner,\r\n.mftcc-form .el-textarea.is-disabled .el-textarea__inner,\r\n.mftcc-form .el-switch.is-disabled,\r\n.mftcc-form .el-checkbox-group.is-disabled,\r\n.mftcc-form .el-radio-group.is-disabled {\r\n background-color: #fafafa;\r\n border-color: transparent;\r\n color: #cccccc !important;\r\n cursor: not-allowed;\r\n height: 100% !important;\r\n border-radius: 0;\r\n}\r\n.el-dropdown-menu {\r\n min-width: 200px;\r\n}\r\n.el-dropdown-menu .el-dropdown-menu__item {\r\n margin: 0;\r\n padding: 5px 16px;\r\n}\r\n.v-modal {\r\n opacity: 0.35;\r\n}\r\n.el-dialog__wrapper {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n}\r\n.el-dialog {\r\n margin: 0 !important;\r\n border-radius: 8px;\r\n max-width: 90%;\r\n max-height: 90%;\r\n}\r\n.el-dialog > .el-dialog__header {\r\n padding: 0;\r\n min-height: 54px;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n background: rgba(24, 144, 255, 0.06);\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__title {\r\n color: rgba(0, 0, 0, 0.85);\r\n line-height: 22px;\r\n font-size: 16px;\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__headerbtn {\r\n top: 14px;\r\n font-size: 24px;\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__headerbtn > .el-dialog__close {\r\n color: #3d3d3d;\r\n font-weight: 700;\r\n}\r\n.el-dialog > .el-dialog__body {\r\n padding: 0;\r\n}\r\n.el-dialog > .el-dialog__footer {\r\n padding: 0;\r\n min-height: 52px;\r\n background: rgba(24, 144, 255, 0.06);\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n}\r\n.el-dialog > .el-dialog__footer .el-button {\r\n min-width: 100px;\r\n}\r\n.el-select-dropdown__item.hover,\r\n.el-select-dropdown__item:hover {\r\n background-color: #ecf5ff;\r\n}\r\n.el-textarea__inner {\r\n overflow: auto;\r\n}\r\n","/*table样式*/\r\n.mftcc-table{\r\n\tflex-grow: 1;\r\n\tmargin: 0 12px;\r\n\tmargin-bottom: 12px;\r\n}\r\n.mftcc-table .el-table .cell, .el-table--border td:first-child .cell, .el-table--border th:first-child .cell{\r\n\t padding-left: 16px;\r\n}\r\n/* .mftcc-table .el-table__body {\r\n background: white;\r\n border: none;\r\n} */\r\n/* .mftcc-table .el-table__body tr {\r\n line-height: 30px !important;\r\n height: 30px !important;\r\n border-bottom: none;\r\n}\r\n.mftcc-table .el-table__body tr:nth-child(even) {\r\n background: #f1f1f1;\r\n}\r\n.mftcc-table .el-table__body tr:nth-child(odd) {\r\n background: #fff;\r\n} */\r\n.mftcc-table .el-table__body tr td{\r\n\tfont-size: 14px;\r\n color: #3D3D3D;\r\n border: none;\r\n\tpadding:8px 0px;\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n/* .mftcc-table .el-table__body tr td:first-child{\r\n\tborder-left: 1px solid #E8E8E8;\r\n}\r\n.mftcc-table .el-table__body tr td:last-child{\r\n\tborder-right: 1px solid #E8E8E8;\r\n} */\r\n.mftcc-table .el-table__body tr:nth-child(even){\r\n\tbackground: #FAFAFA;\r\n}\r\n.mftcc-table .el-table__body tr td a,.mftcc-form .el-form-item a{\r\n\tcolor: #409EFF;\r\n text-decoration: none;\r\n}\r\n.mftcc-table .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n\tbackground: #E3F1FF;\r\n}\r\n.mftcc-form .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n background: transparent;\r\n}\r\n.mftcc-table .el-table__body tr.current-row>td{\r\n\tbackground: #E3F1FF;\r\n}\r\n.mftcc-table .el-form-item{\r\n margin-bottom: 0;\r\n}\r\n/* .mftcc-table .el-table__header {\r\n\tdisplay: block;\r\n\tz-index: 9;\r\n\tposition: absolute;\r\n\tbackground-color: #ffffff;\r\n\tborder:none;\r\n} */\r\n.mftcc-table .el-table th{\r\n\tcolor: #141414;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\tbox-sizing: border-box;\t\r\n \tpadding: 0 5px;\r\n\theight: 48px;\r\n line-height: 48px;\r\n /* text-align: center; */\r\n white-space: nowrap;\r\n\tcursor: default;\r\n\tbackground: #F5F5F5;\r\n\tborder-right: 1px solid #E8E8E8;\r\n border-top: 1px solid #E8E8E8;\r\n\tfont-weight: bold;\r\n}\r\n/* .mftcc-table .el-table th:first-child{\r\n\tborder-left:1px solid #E8E8E8;\r\n} */\r\n.mftcc-table .el-table th>.cell{\r\n display: block;\r\n padding-left: 14px;\r\n padding-right: 14px;\r\n}\r\n/*分页*/\r\n.mftcc-table .el-pagination{\r\n\t/* position: absolute;\r\n bottom: 4px; \r\n width: 100%;*/\r\n\tbackground: #FAFAFA;\r\n\tpadding: 0px;\r\n\ttext-align: right;\r\n\tpadding-right: 10px;\r\n\tmargin: 0px !important;\r\n\tpadding-left: 10px;\r\n\theight: 40px;\r\n}\r\n.mftcc-table .el-pagination .el-pagination__total,.mftcc-table .el-pagination .el-pagination__sizes{\r\n\tfloat: left;\r\n\tfont-size: 12px;\r\n}\r\n.mftcc-table .el-pagination.is-background .el-pager li:not(.disabled){\r\n\tcolor: #141414;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\theight: 40px;\r\n line-height: 40px;\r\n}\r\n.mftcc-table .el-pagination__editor.el-input{\r\n\tmargin: 0 5px;\r\n}\r\n.mftcc-table .el-pagination__editor.el-input .el-input__inner{\r\n\twidth: 48px;\r\n height: 28px;\r\n background: #FFFFFF;\r\n border-radius: 2px;\r\n border: 1px solid #E8E8E8;\r\n}\r\n.mftcc-table .el-input--mini .el-input__inner{\r\n\twidth: 84px;\r\n height: 28px;\r\n background: #FFFFFF;\r\n border-radius: 2px !important;\r\n border: 1px solid #E8E8E8;\r\n font-size: 12px;\r\n}\r\n.mftcc-table .el-pagination .el-pagination__jump{\r\n\tfont-size: 12px !important;\r\n color: #3D3D3D;\r\n}\r\n.mftcc-table .el-pagination button, .el-pagination span:not([class*=suffix]){\r\n\theight: 40px;\r\n line-height: 40px;\r\n}\r\n.el-pagination.is-background .btn-next, .el-pagination.is-background .btn-prev, .el-pagination.is-background .el-pager li{\r\n\tbackground-color: transparent;\r\n\tfont-size: 12px;\r\n\tcolor: #141414;\r\n\tmin-width: 25px;\r\n}\r\n.mftcc-table .el-pagination.is-background .el-pager li:not(.disabled).active{\r\n\tcolor: #409EFF;\r\n\tbackground: none;\r\n}\r\n\r\n.mftcc-table .is-disabled .el-input__inner,.mftcc-table .is-disabled .el-textarea__inner{\r\n\tbackground-color: #F5F7FA !important;\r\n border-color: #E4E7ED !important;\r\n color: #C0C4CC !important;\r\n cursor: not-allowed !important;\r\n}\r\n.mftcc-table .el-table__row .el-button--default{\r\n background: none;\r\n\tborder: none;\r\n\tcolor: #409EFF;\r\n\tpadding: 5px 0px;\r\n\tmin-width: auto;\r\n height: auto;\r\n}\r\n.mftcc-table .el-table__row .el-button--default:hover{\r\n background-color: transparent;\r\n}\r\n.mftcc-table .el-table__row .el-button--default:first-child{\r\n\tmargin-left: 0px;\r\n}\r\n.mftcc-table .el-table__row .el-button--default.is-disabled{\r\n\tcolor: #C0C4CC;\r\n\tcursor: pointer;\r\n}\r\n/* talbe样式结束 */\r\n/* 可编辑table样式开始 */\r\n.mftcc-edit-table{\r\n\tmargin: 0px 20px 0px 20px;\r\n \twidth: auto !important;\r\n}\r\n.mftcc-edit-table .el-table__body tr td{\r\n\tfont-size: 12px;\r\n color: #575757;\r\n border: 0px solid #e9ebf2;\r\n\tpadding:4px 0px;\r\n\tborder-bottom: 1px solid #eee;\r\n}\r\n.mftcc-edit-table .el-table__body tr td a{\r\n\t color: #4a7ec3;\r\n text-decoration: none;\r\n}\r\n.mftcc-edit-table .el-table__body tbody tr:hover {\r\n background-color: #d6f0f5 !important;\r\n}\r\n.mftcc-edit-table .el-table th{\r\n\tcolor: #7e8ea4;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\tbox-sizing: border-box;\t\r\n \tpadding: 0 5px;\r\n\theight: 41px;\r\n line-height: 41px;\r\n white-space: nowrap;\r\n\tcursor: default;\r\n\tbackground: #EDF2FA;\r\n\tborder:1px solid rgba(225,226,227,1);\r\n\tfont-weight: bold;\r\n}\r\n.mftcc-edit-table .el-table th>.cell{\r\n\tdisplay: block;\r\n}\r\n/*分页*/\r\n.mftcc-edit-table .el-pagination{\r\n\tbackground: #fff;\r\n\ttext-align: right;\r\n\tpadding-right: 10px;\r\n\tmargin-top: 10px !important;\r\n}\r\n.mftcc-edit-table .el-pagination .el-pagination__total,.mftcc-edit-table .el-pagination .el-pagination__sizes{\r\n\tfloat: left;\r\n}\r\n.mftcc-edit-table .el-pagination.is-background .el-pager li:not(.disabled).active{\r\n\tbackground: #4a7ec3;\r\n}\r\n\r\n\r\n.mftcc-edit-table .el-table__row .el-button--default{\r\n background: none;\r\n\tborder: none;\r\n\tcolor: #4a7ec3;\r\n\tpadding: 10px 0px;\r\n}\r\n\r\n.mftcc-edit-table .el-table__row .el-button--default.is-disabled{\r\n\tcolor: #C0C4CC;\r\n\tcursor: pointer;\r\n}\r\n/* 可编辑table样式结束 */\r\n/*表单样式*/\r\n.mftcc-form .el-form-item{\r\n\tmargin-bottom: 0;\r\n\tpadding-left: 0px !important;\r\n\tpadding-right: 0px !important;\r\n\tbackground: #F5F5F5;\r\n\theight: 100%;\r\n\tborder-right: 1px solid #E8E8E8;\r\n\tmin-height: 48px;\r\n}\r\n.mftcc-form .el-form-item.mftcc-form-empty{\r\n\tbackground: transparent;\r\n}\r\n.mftcc-form .el-form-item__label{\r\n\t/* width: 35% !important; */\r\n\tpadding: 3px 12px;\r\n line-height:34px;\r\n\tvertical-align: middle;\r\n\theight: 100%;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tmargin-top: 0px;\r\n\tcolor: #141414;\r\n}\r\n.mftcc-form.el-form--label-right .el-form-item__label{\r\n\tjustify-content: flex-end;\r\n}\r\n.mftcc-form .el-table__body tr td:first-child .el-form-item{\r\n\tborder-left: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form .el-form-item__content{\r\n\t/* margin-left: 35% !important; */\r\n\tbackground: #fff;\r\n\t/* border-right: 1px solid #E8E8E8; */\r\n\tborder-left: 1px solid #E8E8E8;\r\n\tposition: relative;\r\n\tright:1px;\r\n\t padding: 0px;\r\n\t height: 100%;\r\n}\r\n.mftcc-form.el-form--label-top .el-form-item__label{\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form.el-form--label-top .el-form-item__label,.mftcc-form.el-form--label-top .el-form-item__content{\r\n\theight: 50%;\r\n\tmin-height: 48px;\r\n}\r\n.mftcc-form .el-table__body td{\r\n\t border-top: 1px solid #E8E8E8;\r\n\t height: 0px;\r\n}\r\n.mftcc-form .el-table__body{\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form .mftcc-form-group .el-col .el-form-item__content{\r\n\tmargin: 0px !important;\r\n border: none;\r\n padding: 0px;\r\n}\r\n\r\n.mftcc-form .mftcc-form-group .el-form-item{\r\n\tbackground:none;\r\n}\r\n.mftcc-form .el-table__body td{\r\n\tbackground: #fff;\r\n}\r\n/* .mftcc-form .el-form-item.mftcc-form-empty,\r\n.mftcc-form .el-form-item.mftcc-form-empty .el-form-item__label,\r\n.mftcc-form .el-form-item.mftcc-form-empty .el-form-item__content{\r\n\tbackground:none;\r\n\tborder: none;\r\n} */\r\n\r\n.mftcc-form .el-date-editor.el-input, .mftcc-form .el-date-editor.el-input__inner {\r\n width: 100%;\r\n}\r\nsection.el-container{\r\n\tborder: none!important;\r\n}\r\n.mftcc-form .el-input__inner{\r\n\tborder: none;\r\n\theight: 100% !important;\r\n}\r\n.mftcc-form .el-textarea__inner{\r\n\tborder: none;\r\n\t/* height: 40px; */\r\n\toutline:none;\r\n\tresize:none;\r\n}\r\n.mftcc-form .el-checkbox-group,\r\n.mftcc-form .el-radio-group,\r\n.mftcc-form .el-switch{\r\n\tpadding: 0 15px;\r\n line-height: 25px;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.mftcc-form .el-input__suffix{\r\n\tdisplay: flex;\r\n align-items: center;\r\n}\r\n.mftcc-form .el-radio{\r\n\tline-height: 34px;\r\n}\r\n.el-scrollbar__wrap{\r\n overflow: auto;\r\n margin: 0 !important;\r\n}\r\n.mftcc-form .el-alert--success.is-dark{\r\n\theight: 48px;\r\n\tpadding: 8px;\r\n\tborder-left: 1px solid #E8E8E8;\r\n\tborder-right: 1px solid #E8E8E8;\r\n\tborder-radius: 0;\r\n\tbackground: rgba(64, 158, 255, 0.15) !important;\r\n}\r\n.mftcc-form .el-alert--success.is-dark .el-alert__title{\r\n\tfont-size:14px;\r\n\tcolor:#141414;\r\n}\t\r\n.mftcc-form .el-form-item__error {\r\n\ttop: auto;\r\n left: auto;\r\n right: 16px;\r\n z-index: 99;\r\n bottom: 18px;\r\n}\r\n\r\n.mftcc-form .mftcc-form-group .el-form-item__error {\r\n\ttop: auto;\r\n left: 15px;\r\n z-index: 99;\r\n bottom: -13px;\r\n}\r\n.mftcc-form .el-table .cell{\r\n\tpadding: 0px;\r\n}\r\n.mftcc-form .el-table .cell,\r\n.mftcc-form .el-table .cell>div,\r\n.mftcc-form .mftcc-form-item,\r\n.mftcc-form .el-input,\r\n.mftcc-form .el-textarea,\r\n.mftcc-form .el-select,\r\n.mftcc-form .el-cascader,\r\n.mftcc-form .mftcc-dailog{\r\n\theight: 100%;\r\n}\r\n.mftcc-form .mftcc-dailog{\r\n width: 100%;\r\n}\r\n.mftcc-form .el-form-item__content .el-input{\r\n height: calc(100% - 4px);\r\n margin-top: 2px;\r\n\tborder: 1px solid transparent;\r\n}\r\n.mftcc-form .el-form-item__content .el-select .el-input,.mftcc-form .el-form-item__content .el-cascader .el-input{\r\n\tmargin-top: 0px;\r\n}\r\n.mftcc-form .el-form-item__content .el-textarea{\r\n\tborder: 1px solid transparent;\r\n}\r\n.mftcc-form .el-form-item__content .el-input.is-disabled,\r\n.mftcc-form .el-form-item__content .el-textarea.is-disabled,\r\n\r\n.mftcc-form .is-disabled .el-form-item__content .el-input,\r\n.mftcc-form .is-disabled .el-form-item__content .el-textarea{\r\n height: 100%;\r\n border: none !important;\r\n box-shadow: none !important;\r\n}\r\n.mftcc-form .el-form-item__content>.el-select,.mftcc-form .el-form-item__content>.el-cascader,.mftcc-form .el-form-item__content>.mftcc-dailog{\r\n display: flex;\r\n align-items: center;\r\n}\r\n.mftcc-form .el-form-item__content .el-input:hover,\r\n.mftcc-form .el-form-item__content .el-textarea:hover{\r\n border: 1px solid #409EFF;\r\n box-shadow: 0px 0px 5px 0px #409EFF;\r\n}\r\n.mftcc-form .el-form-item__content .el-select__tags,.mftcc-form .el-form-item__content .el-cascader__tags{\r\n pointer-events: none;\r\n}\r\n.mftcc-form .el-form-item__content .el-select__tags>span,.mftcc-form .el-form-item__content .el-cascader__tags>span{\r\n pointer-events: auto;\r\n}\r\n.mftcc-form .el-select .el-select__tags,.mftcc-form .el-cascader .el-cascader__tags{\r\n\tpadding: 5px 0;\r\n max-width: none !important;\r\n position: relative;\r\n height: 100%;\r\n}\r\n.mftcc-form .el-select .el-select__tags + .el-input,.mftcc-form .el-cascader>.el-input{\r\n position: absolute;\r\n top: 2px;\r\n left: 0px;\r\n}\r\n.mftcc-form .el-cascader .el-cascader__search-input{\r\n background-color: transparent;\r\n}\r\n/* 弹层table样式 */\r\n.mftcc-table-dialog .el-dialog__body{\r\n\tpadding-top: 10px;\r\n}\r\n.mftcc-table-dialog .mftcc-search-form{\r\n\tpadding: 0 20px;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content{\r\n\tpadding-top: 20px;\r\n}\r\n/* 弹层table样式结束 */\r\n\r\n/* 列表按钮样式开始 */\r\n.mftcc-form-buttom{\r\n\tpadding: 8px 12px;\r\n position: relative;\r\n\ttext-align: right;\r\n\tmargin: 0 12px;\r\n background: #FFF;\r\n}\r\n.mftcc-form-buttom.queryModel>span{\r\n\tfloat: left;\r\n font-size: 18px;\r\n line-height: 30px;\r\n display: block;\r\n}\r\n/* .mftcc-form-buttom button,.mftcc-form-tools button{\r\n\tbackground-color: #409EFF;\r\n color: #FFFFFF;\r\n border: none;\r\n\tborder-radius: 4px;\r\n\tmargin-left: 10px;\r\n\tmin-width: 68px;\r\n\theight: 32px;\r\n\tpadding: 0;\r\n} */\r\n.mftcc-form-buttom .sysBtns button,.mftcc-form-tools .sysBtns button{\r\n\tbackground-color: #fff;\r\n\tcolor: #409EFF;\r\n\tborder: 1px solid rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-form-buttom .sysBtns button:hover, .mftcc-form-tools .sysBtns button:hover{\r\n\tbackground: rgba(64, 158, 255, 0.15);\r\n\tborder-radius: 4px;\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .mftcc-form-tools-item{\r\n display: flex;\r\n align-items: center;\r\n}\r\n.mftcc-form-buttom>button:first-child{\r\n\tmargin-left: 0px;\r\n}\r\n.mftcc-form-buttom.queryModel .sysBtns{\r\n\tdisplay: inline-block;\r\n\tmargin-right: 20px;\r\n}\r\n.mftcc-form-buttom.dynamicModel{\r\n\ttext-align: left;\r\n\tmargin-bottom: 1px;\r\n\tmargin-top: 12px;\r\n}\r\n/* .mftcc-form-buttom.dynamicModel button{\r\n\tpadding: 6px 12px;\r\n\tpadding-left: 20px;\r\n background-color: #4A7EC3;\r\n\tbackground:#4A7EC3 url(../../images/Group23.png) no-repeat 8px center ;\r\n color: #FFFFFF;\r\n\theight: 28px;\r\n\twidth: 68px;\r\n\ttext-align: center;\r\n\tmargin-left: 0;\r\n margin-right: 10px;\r\n} */\r\n/* .mftcc-form-buttom.dynamicModel button:hover{\r\n\t background-color: #36629C;\r\n} */\r\n/* 列表按钮样式结束 */\r\n\r\n/* 列表工具栏样式开始 */\r\n.mftcc-form-tools{\r\n\tpadding: 8px 12px;\r\n position: relative;\r\n\tmargin: 0 12px;\r\n\tbackground: #FFF;\r\n\tdisplay: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n}\r\n.mftcc-form-tools>.mftcc-form-tools-item>div{\r\n\tdisplay: inline-block;\r\n}\r\n.mftcc-form-tools .el-tabs__header{\r\n\tmargin: 0;\r\n}\r\n.mftcc-form-tools .el-tabs__item{\r\n\tpadding: 0px 12px;\r\n text-align: center;\r\n\tfont-size: 14px;\r\n\tcolor: #3D3D3D;\r\n}\r\n.mftcc-form-tools .el-tabs__item:hover{\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__item.is-active{\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__active-bar{\r\n\tbackground-color: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__nav-wrap::after{\r\n\theight: 0px;\r\n}\r\n.mftcc-form-tools .el-input__inner{\r\n\twidth: 230px;\r\n height: 32px;\r\n background: #FFFFFF;\r\n border-radius: 2px;\r\n border: 1px solid #CCCCCC;\r\n line-height: 32px;\r\n}\r\n.mftcc-form-tools .el-input__inner:hover{\r\n\tborder: 1px solid #409EFF;\r\n}\r\n.mftcc-form-tools .el-input__suffix{\r\n\twidth: 30px;\r\n height: 30px;\r\n background: rgba(64, 158, 255, 0.15);\r\n border-radius: 0px 2px 2px 0px;\r\n border: 1px solid rgba(64, 158, 255, 0.45);\r\n margin-right: -5px;\r\n font-size: 12px;\r\n color: #409EFF;\r\n display: flex;\r\n justify-content: center;\r\n\talign-items: center;\r\n\tcursor: pointer;\r\n}\r\n.mftcc-form-tools .el-input__icon.el-icon-search{\r\n\tcursor: pointer;\r\n}\r\n.mftcc-form-tools .el-input__icon.el-input__validateIcon{\r\n\tdisplay: none;\r\n}\r\n/* 列表工具栏样式结束 */\r\n.mftcc-details .el-card__body{\r\n padding: 12px;\r\n}\r\n/*单独显示label开始 */\r\n.mftcc-form-item .only-label .el-form-item__label{\r\n width: 100%!important;\r\n}\r\n.mftcc-form-item .only-label .el-form-item__content{\r\n display: none;\r\n}\r\n/*单独显示label结束 */\r\n/*单独显示input开始 */\r\n.mftcc-form-item .only-input .el-form-item__label{\r\n display: none;\r\n}\r\n.mftcc-form-item .only-input .el-form-item__content{\r\n width: 100%!important;\r\n margin-left:0px!important;\r\n}\r\n/*单独显示input结束 */\r\n.mftcc-form-item .mftcc-form-empty .el-form-item__label{\r\n display: none;\r\n}\r\n.mftcc-form-item .mftcc-form-empty .el-form-item__content{\r\n display: none;\r\n}\r\n/* tooltip样式 开始*/\r\n.el-tooltip__popper.is-dark{\r\n color: #3D3D3D;\r\n box-shadow: 0px 0px 4px 0px #409eff;\r\n background: #e3f1ff;\r\n line-height: 24px;\r\n font-size: 14px;\r\n}\r\n.el-tooltip__popper[x-placement^=top] .popper__arrow{\r\n border-top-color: rgb(64 158 255 / 47%);\r\n}\r\n.el-tooltip__popper[x-placement^=top] .popper__arrow::after{\r\n border-top-color: #e3f1ff;\r\n}\r\n/* tooltip样式 结束*/","/*table样式*/\r\n/* .mftcc-table-query .el-table__body {\r\n background: white;\r\n table-layout: auto;\r\n padding-top: 48px;\r\n} */\r\n/* .mftcc-table-query .el-table__body tr {\r\n height: 41px;\r\n line-height: 41px;\r\n font-size: 14px;\r\n color: #7f7f7f;\r\n background: #ffffff;\r\n border-bottom: 1px solid #f3f3f3;\r\n} */\r\n.mftcc-table-query .el-table__body tr td{\r\n border: none !important;\r\n padding: 0px 0px !important;\r\n line-height: 41px;\r\n vertical-align: center;\r\n color: #3d3d3d;\r\n}\r\n.mftcc-table-query .el-table__body tr:nth-child(even) td{\r\nbackground: #fafafa;\r\n}\r\n.mftcc-table-query .el-table__body tr td a{\r\n color: #4a7ec3;\r\n text-decoration: none;\r\n}\r\n.mftcc-table-query .el-table--enable-row-hover .el-table__body tr:hover>td,\r\n.mftcc-table-query .el-table__body tr.hover-row.current-row>td, \r\n.mftcc-table-query .el-table__body tr.hover-row.el-table__row--striped.current-row>td, \r\n.mftcc-table-query .el-table__body tr.hover-row.el-table__row--striped>td, \r\n.mftcc-table-query .el-table__body tr.hover-row>td{\r\nbackground-color: #E3F2FD !important;\r\n}\r\n/* .mftcc-table-query .el-table__header {\r\ndisplay: block;\r\nz-index: 9;\r\nposition: absolute;\r\nbackground-color: #ffffff;\r\n} */\r\n.mftcc-table-query .el-table tr{\r\nheight: 36px;\r\n line-height: 36px;\r\n border-bottom: 1px solid #e9ebf2;\r\n color: #000000;\r\n}\r\n/* .mftcc-table-query .el-table tr:hover th{\r\n background-color: #E3F2FD !important;\r\n} */\r\n.mftcc-table-query .el-table th{\r\nfont-size: 14px;\r\n font-weight: normal;\r\n color: #3D3D3D;\r\n padding: 0px;\r\n background-color: rgba(64, 158, 255, 0.06);\r\nborder:none;\r\n \r\n}\r\n.mftcc-table-query .el-dropdown-DColumn{\r\n position: absolute;\r\n z-index: 10;\r\n top: 10px;\r\n right: 5px;\r\n}\r\n/*分页*/\r\n.mftcc-table-query .el-pagination{\r\n/* position: absolute;\r\n bottom: 4px; \r\n width: 100%;*/\r\nbackground: #fff;\r\n/* padding: 0px; */\r\ntext-align: right;\r\npadding-right: 10px;\r\nmargin-top: 10px !important;\r\n}\r\n.mftcc-table-query .el-pagination .el-pagination__total,.mftcc-table-query .el-pagination .el-pagination__sizes{\r\nfloat: left;\r\n}\r\n.mftcc-table-query .el-pagination.is-background .el-pager li:not(.disabled).active{\r\nbackground: #4a7ec3;\r\n}\r\n.mftcc-table-query .el-table__row .el-button--default{\r\nbackground-color: transparent !important;\r\nborder: none;\r\ncolor: #409EFF;\r\npadding: 10px 0px;\r\n}\r\n/*表单样式*/\r\n.mftcc-form-query .el-form-item{\r\nmargin-bottom: 0px;\r\npadding-left: 0px !important;\r\n padding-right: 0px !important;\r\n}\r\n\r\n.mftcc-form-query .el-col{\r\n background: #fff;\r\n}\r\n/* .mftcc-form-query .el-col:nth-child(4n+1),.mftcc-form-query .el-col:nth-child(4n+1){\r\n clear:left;\r\n} */\r\nsection.el-container{\r\nborder: none!important;\r\n}\r\n.mftcc-form-query .el-input.is-disabled .el-input__inner{\r\nborder: none;\r\nbackground: none;\r\n color: #666;\r\n cursor: text;\r\n line-height: 20px;\r\n height: 20px;\r\n padding: 0 10px;\r\n}\r\n.mftcc-form-query .el-form-item__content,.mftcc-form-query .el-form-item__label{\r\npadding-left: 10px;\r\nwidth: 100%;\r\nline-height: 36px;\r\nheight: 36px;\r\nborder-bottom: none;\r\n}\r\n.mftcc-form-query .el-table__body{\r\nborder: none;\r\nborder-bottom: 0;\r\n}\r\n.mftcc-form-query .el-table__body .el-alert--success.is-dark{\r\nbackground: #EDF2FA;\r\nmargin-bottom: 0 !important;\r\nborder-bottom: 1px solid #E1E2E3;\r\nborder-right:1px solid #E1E2E3;\r\nborder-left:1px solid #E1E2E3;\r\nborder-radius: 0;\r\nposition: relative;\r\nleft: 1px;\r\ncolor: #3D3D3D;\r\n\r\n}\r\n.mftcc-table-query .el-table__header,.mftcc-table-query .el-table__body{\r\nborder: none;\r\n}\r\n.mftcc-form-query .el-table__body tr:last-child td .el-form-item__content:last-child,.mftcc-form-query .el-table__body tr:last-child td .el-form-item__content:last-child .el-form-item__label{\r\nborder-bottom: 0;\r\n}\r\n/* .mftcc-form-query .el-table__body td:last-child{\r\nborder-right: 1px solid #E1E2E3;\r\nposition: relative;right: 2px;\r\n} */\r\n.mftcc-form-query .el-checkbox.is-disabled,.mftcc-form-query .el-radio.is-disabled{\r\ndisplay: none;\r\nmargin-right: 0;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked,.mftcc-form-query .el-radio.is-disabled.is-checked{\r\ndisplay: inline-block;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__input,.mftcc-form-query .el-radio.is-disabled.is-checked .el-radio__input{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__label,.mftcc-form-query .el-radio.is-disabled.is-checked .el-radio__label{\r\ndisplay: block;\r\ncolor: #666;\r\ncursor: text;\r\npadding-left: 0;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__label:after{\r\ncontent: \"|\";\r\nmargin: 0 6px;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled[class~='is-checked']:last-of-type .el-checkbox__label:after{\r\ncontent: \"\";\r\n}\r\n.mftcc-form-query .el-textarea__inner{\r\nborder: none;\r\nresize: none;\r\n}\r\n.mftcc-form-query .el-input.is-disabled .el-input__icon{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-input--prefix .el-input__inner{\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-radio{\r\nline-height: 34px;\r\n}\r\n.mftcc-form-query .el-checkbox-group,.mftcc-form-query .el-radio-group{\r\npadding-left: 10px;\r\n}\r\n.el-scrollbar__wrap{\r\noverflow: auto;\r\n} \r\n.mftcc-form-query.el-form--label-top .el-form-item__label{\r\nposition: relative;\r\nline-height: 36px;\r\npadding-bottom: 0;\r\npadding-left: 10px;\r\nwidth: 100%;\r\nbackground: #FAFAFA;\r\nborder-bottom: none;\r\ncolor: #3D3D3D;\r\n\r\n}\r\n.mftcc-form-query .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n background-color: transparent !important;\r\n}\r\n\r\n.mftcc-form-query.el-form--label-top .el-form-item__label\r\n.mftcc-form-query.el-form--label-top .el-form-item__label:before{\r\nleft: 0px!important;\r\nposition: absolute;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled:after{\r\ncontent: \"否\";\r\ncolor: #666;\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled{\r\nopacity: 1;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled.is-checked:after{\r\ncontent: \"是\";\r\n}\r\n.mftcc-form-query .el-switch.is-disabled .el-switch__core{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-textarea.is-disabled .el-textarea__inner{\r\nbackground: none;\r\ncursor: text;\r\n}\r\n.mftcc-form-query .el-form-item__content{\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-form-item__content span{\r\npadding-right: 20px;\r\ndisplay: block;\r\ncolor: #3D3D3D;\r\noverflow: hidden;\r\n text-overflow: ellipsis;\r\nwhite-space: nowrap;\r\n}\r\n.mftcc-form-query .el-table .cell{\r\npadding: 0px;\r\nheight: 100%;\r\n}\r\n",".mftcc-form-search{\r\n padding: 8px 12px;\r\n margin: 12px;\r\n margin-bottom: 1px;\r\n background-color: #FFF;\r\n width: auto;\r\n}\r\n.mftcc-form-search .el-form-item {\r\n margin-bottom: 0px;\r\n}\r\n.mftcc-form-search .el-form-item__content input{\r\n\theight: 34px;\r\n}\r\n.mftcc-form-search .el-range-editor .el-range-input{\r\n height: 32px;\r\n}\r\n.mftcc-form-search .el-date-editor .el-range-separator{\r\n height: 34px;\r\n line-height: 34px;\r\n white-space: nowrap;\r\n}\r\n.mftcc-form-search .el-date-editor .el-range__close-icon{\r\n display: none;\r\n}\r\n.mftcc-form-search .el-form-item__label{\r\n width: 35% !important;\r\n}\r\n\r\n.mftcc-form-search .el-form-item__content{\r\n\tmargin-left: 35% !important;\r\n}\r\n\r\n.mftcc-form-search .el-date-editor{\r\n width: 100%;\r\n}\r\n.mftcc-form-search .el-table .cell{\r\n\tpadding: 0px;\r\n}\r\n.mftcc-form-search .widgets{\r\n padding: 0px;\r\n margin: 0;\r\n}\r\n.mftcc-form-search .search-button button {\r\n background-color: #409EFF;\r\n border: none;\r\n border-radius: 0px;\r\n height: 100%;\r\n float: right;\r\n padding: 10px 20px;\r\n border-radius: 4px;\r\n}",".mftcc-table .isExpand.el-table--enable-row-hover .mftcc-form-expand .el-table__body tr:hover>td{\r\n background: #F3F9FF;\r\n}\r\n.mftcc-table .isExpand .mftcc-form-expand .el-table__body tr:nth-child(even){\r\n background: none;\r\n}\r\n.mftcc-table .isExpand .mftcc-form-expand .el-table__body tr td{\r\n border:none;\r\n}\r\n/* .mftcc-table .mftcc-form-expand .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{\r\n content:\"\"\r\n} */\r\n.mftcc-table .isExpand .el-form-item__label{\r\n color: #99a9bf;\r\n}\r\n.mftcc-table .isExpand .el-form-item__content{\r\n color: #606266;\r\n padding-left: 12px;\r\n}\r\n.mftcc-table .isExpand .el-table__expanded-cell:hover{\r\n background-color: #FFFFFF !important;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-form-item__label{\r\n line-height: 30px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input__inner,.mftcc-table .isExpand .expandEditForm .el-input__icon,.mftcc-table .isExpand .expandEditForm .el-form-item__content{\r\n height: 30px;\r\n line-height: 30px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input,.mftcc-table .isExpand .expandEditForm .el-textarea{\r\n width: 250px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-table__body tr td{\r\n padding: 4px 0;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-tag--small{\r\n height: 20px;\r\n line-height: 20px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-select .el-tag__close.el-icon-close{\r\n top: -1px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input__inner:hover, .mftcc-table .isExpand .expandEditForm .el-textarea__inner:hover, .mftcc-table .isExpand .expandEditForm .el-select:hover .el-input__inner {\r\n border: 1px solid #409EFF;\r\n box-shadow: 0px 0px 5px 0px #409EFF;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-form-item__error{\r\n top: 5px;\r\n left: 275px;\r\n}","/* @import \"../../../../assets/font/font.css\"; */\r\n@import \"./header.css\";\r\n@import \"./menu.css\";\r\n@import \"./components.css\";\r\n@import \"./components_query.css\";\r\n@import \"./components_search.css\";\r\n@import \"./components_expand.css\";\r\n\r\nbody,\r\ntd,\r\nth {\r\n font-family: \"Helvetica Neue\", Helvetica, \"PingFang SC\", \"Hiragino Sans GB\",\r\n \"Microsoft YaHei\", \"微软雅黑\", Arial, sans-serif;\r\n}\r\n.el-header,\r\n.el-footer {\r\n color: #333;\r\n text-align: center;\r\n display: flex;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n.el-main {\r\n display: flex;\r\n color: #333;\r\n flex-direction: column;\r\n height: 100%;\r\n padding: 0px;\r\n}\r\n.el-main > .pt,\r\n#app > .pt {\r\n display: flex;\r\n width: 100%;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\nhtml,\r\nbody,\r\n#app,\r\n.el-container.is-vertical {\r\n padding: 0px;\r\n margin: 0px;\r\n height: 100%;\r\n overflow: hidden;\r\n}\r\n.el-loading-mask.is-fullscreen {\r\n z-index: 9999 !important;\r\n}\r\n#app {\r\n overflow: auto;\r\n}\r\n.el-container {\r\n height: 100%;\r\n}\r\n.el-container.mftcc-main-el-containner {\r\n height: calc(100% - 55px) !important;\r\n}\r\n/* 悬浮菜单 开始 */\r\n.mftcc-fixed-drawer {\r\n top: 55px;\r\n}\r\n.mftcc-fixed-drawer .el-drawer__header {\r\n padding: 0;\r\n}\r\n.mftcc-fixed-drawer .mftcc-fixed-menu-mark {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.mftcc-fixed-drawer .mftcc-main-drawer {\r\n width: 80px;\r\n background-color: #ffffff;\r\n box-shadow: -4px 0px 8px 4px rgba(0, 0, 0, 0.08);\r\n}\r\n.mftcc-fixed-drawer .mftcc-main-drawer .mftcc-fixed-menu {\r\n display: block;\r\n top: 10px;\r\n position: absolute;\r\n height: 100%;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item {\r\n width: 80px;\r\n height: 70px;\r\n margin: 5px 0px;\r\n position: relative;\r\n font-size: 14px;\r\n color: #141414;\r\n text-align: center;\r\n cursor: pointer;\r\n border-bottom: 1px solid #e8e8e8;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item:hover {\r\n color: #409eff;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item\r\n i {\r\n margin: 0px 10px;\r\n height: 30px;\r\n line-height: 30px;\r\n font-size: 20px;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item\r\n span {\r\n display: block;\r\n}\r\n/* 悬浮菜单 结束*/\r\n/* 悬浮菜单进入动画 开始 */\r\n/* .mftcc-fixed-menu-transition-enter-active {\r\n transition: all .50s ease;\r\n}\r\n.mftcc-fixed-menu-transition-enter {\r\n transform: translateX(80px);\r\n} */\r\n.mftcc-fixed-menu-transition-enter-active {\r\n transition: right 0.5s ease;\r\n}\r\n.mftcc-fixed-menu-transition-enter {\r\n right: -80px;\r\n}\r\n.mftcc-fixed-menu-transition-enter-to {\r\n right: 0px;\r\n}\r\n/* 悬浮菜单进入动画 结束*/\r\n\r\n/* 动态列表页面样式开始 */\r\n.mftcc-list .mftcc-dynamic-insert-div {\r\n padding: 10px;\r\n border-bottom: 1px solid #ddd;\r\n}\r\n.mftcc-list .mftcc-dynamic-insert-div .el-button--primary {\r\n padding: 6px 10px;\r\n}\r\n.mftcc-list .dynamic-table {\r\n margin: 0;\r\n}\r\n/* 动态列表页面样式开始 */\r\n\r\n/* 列表页面样式开始 */\r\n.mftcc-list {\r\n background-color: #f2f2f4;\r\n}\r\n.mftcc-list .mftcc-dynamic-form {\r\n padding: 0;\r\n padding-bottom: 20px;\r\n margin: 0px 10px;\r\n background: none;\r\n}\r\n.mftcc-list .mftcc-search-form {\r\n padding: 20px 20px;\r\n margin: 10px 10px;\r\n background-color: #fff;\r\n}\r\n.mftcc-list .mftcc-search-form .el-row {\r\n width: 100%;\r\n}\r\n.mftcc-list .mftcc-list-table {\r\n background-color: #fff;\r\n margin: 0 10px 10px;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div {\r\n padding: 14px 0px 14px 20px;\r\n /* \tborder-bottom: 1px solid #e3e3e3; */\r\n position: relative;\r\n text-align: right;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div > span {\r\n float: left;\r\n font-size: 18px;\r\n line-height: 30px;\r\n display: block;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div .mftcc-insert-button {\r\n background-color: #fff;\r\n border-radius: 0px;\r\n color: #aaa;\r\n height: 36px;\r\n border: 1px solid #ddd;\r\n padding: 6px 18px;\r\n margin-right: 22px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-list .mftcc-search-form .search-button button {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n border-radius: 0px;\r\n height: 100%;\r\n float: right;\r\n padding: 10px 20px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-list .mftcc-search-form .custom-search {\r\n width: 100%;\r\n}\r\n\r\n/* 列表页面样式结束 */\r\n.mftcc-form-header {\r\n font-size: 14px;\r\n width: 100%;\r\n padding-top: 0;\r\n background: #fff;\r\n line-height: 46px;\r\n text-align: left;\r\n padding-left: 15px;\r\n box-sizing: border-box;\r\n border-bottom: 1px solid #e8e8e8;\r\n color: #141414;\r\n}\r\n.mftcc-tab .mftcc-container .mftcc-form-header {\r\n border: none;\r\n}\r\n.mftcc-tab .el-tabs__header {\r\n margin-bottom: 5px;\r\n}\r\n/* 按钮样式开始 */\r\n.el-button--primary {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n border-radius: 0px;\r\n padding: 10px 20px;\r\n}\r\n\r\n.el-button--primary:hover {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n}\r\n\r\n.el-button--default {\r\n border-radius: 0px;\r\n padding: 10px 20px;\r\n}\r\n/* 按钮样式结束 */\r\n\r\n/*tab样式开始*/\r\n.mftcc-tab {\r\n height: calc(100% - 50px);\r\n}\r\n.mftcc-tab .el-tabs.el-tabs--top {\r\n height: calc(100% - 58px);\r\n}\r\n/* 头部全局样式开始 */\r\n.el-page-header {\r\n padding-left: 10px;\r\n line-height: 50px;\r\n border-bottom: 1px solid #e1e2e3;\r\n color: #666;\r\n}\r\n.el-page-header__left::after {\r\n width: 0;\r\n}\r\n/* 头部全局样式结束 */\r\n.mftcc-tab .el-tabs__nav-wrap {\r\n padding: 0 10px;\r\n}\r\n.mftcc-tab .el-tabs__item.is-active {\r\n color: #4a7ec3;\r\n font-size: 14px;\r\n padding: 0 20px !important;\r\n top: 0;\r\n}\r\n.mftcc-tab .el-tabs__active-bar {\r\n background-color: #4a7ec3;\r\n padding: 0 20px;\r\n left: -20px;\r\n bottom: 0px;\r\n}\r\n.mftcc-tab .el-tabs__item {\r\n font-size: 12px;\r\n padding: 0 20px !important;\r\n top: 0px;\r\n height: 30px;\r\n line-height: 30px;\r\n}\r\n.mftcc-tab .el-tabs__nav-wrap::after {\r\n height: 0;\r\n}\r\n.mftcc-tab .el-tabs__content {\r\n padding: 0 10px;\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.mftcc-tab .el-tabs__content .el-tab-pane {\r\n border: none;\r\n box-shadow: none;\r\n min-height: calc(100% - 10px);\r\n}\r\n.mftcc-tab .mftcc-list .mftcc-search-form {\r\n margin: 10px 0px;\r\n}\r\n.mftcc-tab .mftcc-list .mftcc-list-table {\r\n margin: 0 0 10px;\r\n}\r\n.mftcc-form-tips {\r\n line-height: 40px;\r\n font-size: 12px;\r\n color: #e72b00;\r\n width: 70%;\r\n margin: 0 auto;\r\n padding-left: 40px;\r\n}\r\n/*tab样式结束*/\r\n\r\n/*滚动条样式*/\r\n::-webkit-scrollbar {\r\n /*滚动条整体样式*/\r\n width: 8px; /*高宽分别对应横竖滚动条的尺寸*/\r\n height: 8px;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n /*滚动条里面小方块*/\r\n border-radius: 5px;\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n background: rgba(0, 0, 0, 0.2);\r\n}\r\n::-webkit-scrollbar-track {\r\n /*滚动条里面轨道*/\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n border-radius: 0;\r\n background: rgba(0, 0, 0, 0.1);\r\n}\r\n/* 滚动条样式结束 */\r\n/* 详情页面样式开始 */\r\n.mftcc-details {\r\n background-color: #f2f2f4;\r\n padding: 10px;\r\n /* min-height: 100%; */\r\n /* display: table; \r\n width: 100%;*/\r\n}\r\n.mftcc-details .mftcc-details-card {\r\n background-color: #fff;\r\n min-height: 130px;\r\n margin-bottom: 10px;\r\n padding: 10px;\r\n}\r\n.mftcc-details .mftcc-details-card .mftcc-details-header {\r\n margin-bottom: 2px;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info {\r\n min-height: 200px; /* \r\n background-color: #F8F9FC; */\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-tag--dark.el-tag--success,\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-button--mini,\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-tag--medium {\r\n height: 24px;\r\n line-height: 22px;\r\n padding: 0 16px;\r\n border-radius: 16px;\r\n text-align: center;\r\n}\r\n\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .mftcc-details-header-img {\r\n text-align: center;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .mftcc-details-header-img\r\n img {\r\n height: 132px;\r\n width: 132px;\r\n border-radius: 50%;\r\n margin-top: 20px;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom {\r\n height: 32px;\r\n background-color: #e0f4f7;\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom\r\n button {\r\n border: none;\r\n background: none;\r\n margin: 0px;\r\n padding: 0px 10px;\r\n font-size: 14px;\r\n font-weight: 400;\r\n color: #4a7ec3;\r\n height: 100%;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom\r\n button:hover {\r\n color: #4a7ec3;\r\n background-color: #d0e9ed;\r\n border-color: #adadad;\r\n}\r\n.mftcc-details .el-collapse {\r\n border: none;\r\n}\r\n.mftcc-details .el-collapse-item {\r\n margin-bottom: 0;\r\n}\r\n.mftcc-details .el-collapse-item .el-collapse-item__content {\r\n padding-bottom: 0px;\r\n}\r\n.mftcc-details .el-collapse-item__header {\r\n height: 40px;\r\n border-bottom: 0;\r\n background: rgba(64, 158, 255, 0.15);\r\n}\r\n.mftcc-details .el-collapse-item__wrap {\r\n padding: 0;\r\n border: none;\r\n}\r\n.mftcc-details .mftcc-collapse-title {\r\n width: calc(100% - 3px);\r\n height: 37px;\r\n margin-left: 15px;\r\n line-height: 37px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n position: relative;\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-arrow-up:before {\r\n content: url(../../images/slideClose.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-arrow-down:before {\r\n content: url(../../images/slideOpen.png);\r\n}\r\n\r\n.mftcc-details .mftcc-collapse-title .el-icon-plus:before {\r\n content: url(../../images/plus.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-edit-outline {\r\n position: absolute;\r\n right: 30px;\r\n top: 10px;\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-edit-outline:before {\r\n content: \"编辑\";\r\n color: #409eff;\r\n font-size: 14px;\r\n}\r\n.mftcc-details .mftcc-collapse-info {\r\n /* min-height: 200px; */\r\n}\r\n.mftcc-details .mftcc-collapse-table-info {\r\n display: flex;\r\n}\r\n.mftcc-details .mftcc-collapse-title i:first-child {\r\n color: #409eff;\r\n margin-left: 0px;\r\n margin-right: 0;\r\n position: relative;\r\n top: 2px;\r\n font-size: 22px;\r\n}\r\n.mftcc-details .mftcc-collapse-title i:last-child {\r\n font-size: 20px;\r\n float: right;\r\n margin-top: 9px;\r\n margin-right: 10px;\r\n}\r\n.mftcc-details .el-collapse-item__arrow {\r\n display: none;\r\n}\r\n/* 详情页面样式结束 */\r\n/* 基础增改查看页面样式开始 */\r\n.mftcc-container .el-container {\r\n border: none !important;\r\n width: 70%;\r\n margin: 0px auto;\r\n padding: 0px 20px 80px;\r\n}\r\n.mftcc-container .el-header {\r\n height: auto !important;\r\n}\r\n.mftcc-container .mftcc-container-button {\r\n position: fixed;\r\n bottom: 10px;\r\n width: calc(100% - 20px) !important;\r\n left: 10px !important;\r\n background-color: #fafafa;\r\n height: 50px;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n z-index: 100;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n/* .mftcc-container .mftcc-container-button .el-button.el-button--primary,.mftcc-container .mftcc-container-button .el-button.el-button--default {\r\n background: #4a71e3;\r\n border: 1px solid #E1E2E3;\r\n width: 100px;\r\n line-height: 32px;\r\n font-size: 14px;\r\n color: #fff;\r\n padding: 0;\r\n cursor: pointer;\r\n}\r\n.mftcc-container .mftcc-container-button .el-button.el-button--primary:hover,.mftcc-container .mftcc-container-button .el-button.el-button--default:hover {\r\n\tbackground: #36629c;\r\n} */\r\n.mftcc-container .mftcc-container-button .el-button.el-button--default {\r\n background: #ffffff !important;\r\n color: #3d3d3d !important;\r\n border: 1px solid #cccccc !important;\r\n margin-left: 10px;\r\n}\r\n\r\n.mftcc-container .el-row {\r\n width: 100%;\r\n}\r\n/* 基础增改查看页面样式结束 */\r\n/* 公共样式 */\r\nbutton.el-button.el-button--primary {\r\n background-color: #409eff;\r\n color: #ffffff;\r\n border: none;\r\n border-radius: 4px;\r\n margin-left: 10px;\r\n min-width: 68px;\r\n height: 32px;\r\n padding: 0 15px;\r\n}\r\nbutton.el-button.el-button--default {\r\n color: #3d3d3d;\r\n background-color: #fff;\r\n border: 1px solid #cccccc;\r\n border-radius: 4px;\r\n margin-left: 10px;\r\n min-width: 68px;\r\n height: 32px;\r\n padding: 0 15px;\r\n}\r\nbutton.el-button.el-button--primary:focus,\r\nbutton.el-button.el-button--primary:hover {\r\n background-color: #5cacff;\r\n color: #ffffff;\r\n}\r\nbutton.el-button.el-button--primary:active {\r\n background-color: #3686d9;\r\n color: #bac8d9;\r\n}\r\nbutton.el-button.el-button--default:focus,\r\nbutton.el-button.el-button--default:hover {\r\n background-color: #fff;\r\n color: #409eff;\r\n border-color: #409eff38;\r\n}\r\nbutton.el-button.el-button--default:active {\r\n border-color: #409eff;\r\n}\r\n.mftcc-form .el-input.is-disabled .el-input__inner,\r\n.mftcc-form .el-textarea.is-disabled .el-textarea__inner,\r\n.mftcc-form .el-switch.is-disabled,\r\n.mftcc-form .el-checkbox-group.is-disabled,\r\n.mftcc-form .el-radio-group.is-disabled {\r\n background-color: #fafafa;\r\n border-color: transparent;\r\n color: #cccccc !important;\r\n cursor: not-allowed;\r\n height: 100% !important;\r\n border-radius: 0;\r\n}\r\n.el-dropdown-menu {\r\n min-width: 200px;\r\n}\r\n.el-dropdown-menu .el-dropdown-menu__item {\r\n margin: 0;\r\n padding: 5px 16px;\r\n}\r\n.v-modal {\r\n opacity: 0.35;\r\n}\r\n.el-dialog__wrapper {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.el-dialog {\r\n margin: 0 !important;\r\n border-radius: 8px;\r\n max-width: 90%;\r\n max-height: 90%;\r\n}\r\n.el-dialog > .el-dialog__header {\r\n padding: 0;\r\n min-height: 54px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background: rgba(24, 144, 255, 0.06);\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__title {\r\n color: rgba(0, 0, 0, 0.85);\r\n line-height: 22px;\r\n font-size: 16px;\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__headerbtn {\r\n top: 14px;\r\n font-size: 24px;\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__headerbtn > .el-dialog__close {\r\n color: #3d3d3d;\r\n font-weight: 700;\r\n}\r\n.el-dialog > .el-dialog__body {\r\n padding: 0;\r\n}\r\n.el-dialog > .el-dialog__footer {\r\n padding: 0;\r\n min-height: 52px;\r\n background: rgba(24, 144, 255, 0.06);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.el-dialog > .el-dialog__footer .el-button {\r\n min-width: 100px;\r\n}\r\n.el-select-dropdown__item.hover,\r\n.el-select-dropdown__item:hover {\r\n background-color: #ecf5ff;\r\n}\r\n.el-textarea__inner {\r\n overflow: auto;\r\n}\r\n",".mftcc-layout-menu {\r\n height: 100%;\r\n overflow-x: hidden;\r\n}\r\n.mftcc-layout-menu .menu{\r\n z-index: 100;\r\n width: 100px;\r\n min-height: 100%;\r\n overflow: hidden;\r\n background-color: #101D29;\r\n}\r\n.mftcc-layout-menu .el-scrollbar__bar {\r\n z-index: 101;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item{\r\n margin-bottom: 1px;\r\n padding: 0 !important;\r\n color: #fff;\r\n height: 60px;\r\n\twidth: 100px;\r\n line-height: initial;\r\n display: flex;\r\n flex-wrap: wrap;\r\n\tbox-sizing: border-box;\r\n\tpadding-left:22px!important;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:hover{\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:focus{\r\n background: none;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item.is-active{\r\n position: relative;\r\n background: url(../../images/jiantou.png) no-repeat 0px -6px;\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item i{\r\n position: relative;\r\n top: 22px;\r\n display: block;\r\n font-family: 'Glyphicons Halflings';\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 1;\r\n color: #fff;\r\n font-size: 16px;\r\n width: 16px;\r\n\theight: 16px;\r\n\tfloat: left;\r\n margin: 0;\r\n\tmargin-right: 8px;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item span{\r\n font-size: 14px;\r\n text-align: center;\r\n display: block;\r\n width:auto;\r\n line-height: 60px;\r\n\tfloat: left;\r\n}\r\n\r\n.mftcc-layout-menu .mftcc-multilevel-menu{\r\n background-color: rgb(255, 255, 255);\r\n height: calc(100% - 55px);\r\n width: 200px;\r\n position: absolute;\r\n top: 55px;\r\n left: 100px;\r\n box-shadow: 4px 0px 4px #c0c4cc;\r\n z-index: 99;\r\n overflow-y: auto;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-item{\r\n width: 90%;\r\n margin: 0 auto;\r\n border-bottom: 1px solid #F1F1F3;\r\n padding: 15px 0 15px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-mask{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute;\r\n left: 0;\r\n z-index: 98;\r\n top: 0;\r\n}\r\n.second-menu-title span{\r\n color: #333;\r\n width: 140px;\r\n text-align: left;\r\n font-size: 14px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 36px;\r\n padding-left: 15px;\r\n}\r\n\r\n.second-menu-title span:hover{\r\n color: #4a7ec3;\r\n}\r\n\r\n.three-menu-title:hover{\r\n color: #4a7ec3;\r\n}\r\n\r\n.three-menu-title {\r\n color: #333;\r\n text-align: left;\r\n font-size: 12px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 32px;\r\n margin-left: 25px;\r\n}\r\n\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter-active,\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-active {\r\n transition: all .3s ease;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter, .mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-to{\r\n transform: translateX(-200px);\r\n}",".mftcc-layout-menu {\r\n height: 100%;\r\n overflow-x: hidden;\r\n}\r\n.mftcc-layout-menu .menu{\r\n z-index: 100;\r\n width: 100px;\r\n min-height: 100%;\r\n overflow: hidden;\r\n background-color: #101D29;\r\n}\r\n.mftcc-layout-menu .el-scrollbar__bar {\r\n z-index: 101;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item{\r\n margin-bottom: 1px;\r\n padding: 0 !important;\r\n color: #fff;\r\n height: 60px;\r\n\twidth: 100px;\r\n line-height: initial;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -ms-flex-wrap: wrap;\r\n flex-wrap: wrap;\r\n\t-webkit-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tpadding-left:22px!important;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:hover{\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:focus{\r\n background: none;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item.is-active{\r\n position: relative;\r\n background: url(../../images/jiantou.png) no-repeat 0px -6px;\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item i{\r\n position: relative;\r\n top: 22px;\r\n display: block;\r\n font-family: 'Glyphicons Halflings';\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 1;\r\n color: #fff;\r\n font-size: 16px;\r\n width: 16px;\r\n\theight: 16px;\r\n\tfloat: left;\r\n margin: 0;\r\n\tmargin-right: 8px;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item span{\r\n font-size: 14px;\r\n text-align: center;\r\n display: block;\r\n width:auto;\r\n line-height: 60px;\r\n\tfloat: left;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu{\r\n background-color: rgb(255, 255, 255);\r\n height: calc(100% - 55px);\r\n width: 200px;\r\n position: absolute;\r\n top: 55px;\r\n left: 100px;\r\n -webkit-box-shadow: 4px 0px 4px #c0c4cc;\r\n box-shadow: 4px 0px 4px #c0c4cc;\r\n z-index: 99;\r\n overflow-y: auto;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-item{\r\n width: 90%;\r\n margin: 0 auto;\r\n border-bottom: 1px solid #F1F1F3;\r\n padding: 15px 0 15px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-mask{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute;\r\n left: 0;\r\n z-index: 98;\r\n top: 0;\r\n}\r\n.second-menu-title span{\r\n color: #333;\r\n width: 140px;\r\n text-align: left;\r\n font-size: 14px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 36px;\r\n padding-left: 15px;\r\n}\r\n.second-menu-title span:hover{\r\n color: #4a7ec3;\r\n}\r\n.three-menu-title:hover{\r\n color: #4a7ec3;\r\n}\r\n.three-menu-title {\r\n color: #333;\r\n text-align: left;\r\n font-size: 12px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 32px;\r\n margin-left: 25px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter-active,\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-active {\r\n -webkit-transition: all .3s ease;\r\n transition: all .3s ease;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter, .mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-to{\r\n -webkit-transform: translateX(-200px);\r\n transform: translateX(-200px);\r\n}","\r\n/* fade */\r\n.fade-enter-active,\r\n.fade-leave-active {\r\n transition: opacity 0.28s;\r\n}\r\n\r\n.fade-enter,\r\n.fade-leave-active {\r\n opacity: 0;\r\n}\r\n\r\n/* fade-transform */\r\n.fade-transform-leave-active,\r\n.fade-transform-enter-active {\r\n transition: all .25s;\r\n}\r\n\r\n.fade-transform-enter {\r\n opacity: 0;\r\n transform: translateX(-30px);\r\n}\r\n\r\n.fade-transform-leave-to {\r\n opacity: 0;\r\n transform: translateX(30px);\r\n}\r\n\r\n/* breadcrumb transition */\r\n.breadcrumb-enter-active,\r\n.breadcrumb-leave-active {\r\n transition: all .5s;\r\n}\r\n\r\n.breadcrumb-enter,\r\n.breadcrumb-leave-active {\r\n opacity: 0;\r\n transform: translateX(20px);\r\n}\r\n\r\n.breadcrumb-move {\r\n transition: all .5s;\r\n}\r\n\r\n.breadcrumb-leave-active {\r\n position: absolute;\r\n}\r\n","\r\n/* fade */\r\n.fade-enter-active,\r\n.fade-leave-active {\r\n -webkit-transition: opacity 0.28s;\r\n transition: opacity 0.28s;\r\n}\r\n.fade-enter,\r\n.fade-leave-active {\r\n opacity: 0;\r\n}\r\n/* fade-transform */\r\n.fade-transform-leave-active,\r\n.fade-transform-enter-active {\r\n -webkit-transition: all .25s;\r\n transition: all .25s;\r\n}\r\n.fade-transform-enter {\r\n opacity: 0;\r\n -webkit-transform: translateX(-30px);\r\n transform: translateX(-30px);\r\n}\r\n.fade-transform-leave-to {\r\n opacity: 0;\r\n -webkit-transform: translateX(30px);\r\n transform: translateX(30px);\r\n}\r\n/* breadcrumb transition */\r\n.breadcrumb-enter-active,\r\n.breadcrumb-leave-active {\r\n -webkit-transition: all .5s;\r\n transition: all .5s;\r\n}\r\n.breadcrumb-enter,\r\n.breadcrumb-leave-active {\r\n opacity: 0;\r\n -webkit-transform: translateX(20px);\r\n transform: translateX(20px);\r\n}\r\n.breadcrumb-move {\r\n -webkit-transition: all .5s;\r\n transition: all .5s;\r\n}\r\n.breadcrumb-leave-active {\r\n position: absolute;\r\n}\r\n","<template>\r\n <div\r\n style=\"\r\n width: 100%;\r\n flex-grow: 1;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n \"\r\n >\r\n <div\r\n class=\"mftcc-form-search\"\r\n v-if=\"option.modelType == 'queryModel' && queryModelShow\"\r\n >\r\n <el-row style=\"width: 100%\">\r\n <el-col :span=\"20\" style=\"min-height: 100px; display: flex; align-items: center\">\r\n <el-form\r\n label-position=\"right\"\r\n label-width=\"130px\"\r\n ref=\"searchForm\"\r\n style=\"width: 100%\"\r\n :model=\"searchData\"\r\n >\r\n <template v-for=\"col in option.columns\">\r\n <el-col\r\n :span=\"\r\n isEmpty(option.searchColCut) || option.searchColCut <= 1\r\n ? 24\r\n : Math.floor(24 / option.searchColCut)\r\n \"\r\n v-if=\"col.isQuery\"\r\n :key=\"col.prop\"\r\n >\r\n <form-item\r\n :props=\"col\"\r\n v-model=\"searchData[col.prop]\"\r\n :designer=\"true\"\r\n :isQuery=\"true\"\r\n class=\"widgets\"\r\n >\r\n </form-item>\r\n </el-col>\r\n </template>\r\n </el-form>\r\n </el-col>\r\n <el-col :span=\"4\">\r\n <div class=\"search-button\">\r\n <el-button class=\"searchBtn\" type=\"primary\" @click=\"searchTableData\"\r\n >查询</el-button\r\n >\r\n </div>\r\n </el-col>\r\n <el-col :span=\"4\" style=\"margin-top: 10px\">\r\n <div class=\"search-button\">\r\n <el-button class=\"searchBtn\" type=\"primary\" @click=\"resetSearchData\"\r\n >重置</el-button\r\n >\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n <div\r\n class=\"mftcc-form-buttom\"\r\n v-if=\"\r\n option.modelType == 'queryModel' ||\r\n (option.modelType == 'dynamicModel' && option.customBtns.length > 0)\r\n \"\r\n :class=\"option.modelType\"\r\n >\r\n <span\r\n v-if=\"option.modelType == 'queryModel'\"\r\n style=\"position: absolute; left: 20px; top: 10px\"\r\n >{{ option.tableName }}</span\r\n >\r\n <template v-for=\"(btn, index) in option.customBtns\">\r\n <el-button\r\n :key=\"index\"\r\n class=\"optbtn\"\r\n type=\"primary\"\r\n v-if=\"$hasPerm(btn.perm || true)\"\r\n @click=\"Fn(btn.callback)\"\r\n >\r\n {{ btn.label }}\r\n </el-button>\r\n </template>\r\n <div class=\"sysBtns\" v-if=\"option.modelType == 'queryModel'\">\r\n <template v-if=\"option.isEdit\">\r\n <el-button\r\n type=\"primary\"\r\n icon=\"el-icon-plus\"\r\n size=\"mini\"\r\n @click=\"addTableRow\"\r\n >{{ editTableInsertLabel }}</el-button\r\n >\r\n <el-button\r\n type=\"primary\"\r\n icon=\"el-icon-check\"\r\n size=\"mini\"\r\n @click=\"saveTableRows\"\r\n >{{ editTableSaveLabel }}</el-button\r\n >\r\n <template v-if=\"option.editType == 'all'\">\r\n <el-button\r\n v-if=\"tableIsEdit == false\"\r\n type=\"primary\"\r\n icon=\"el-icon-edit\"\r\n size=\"mini\"\r\n @click=\"editTableRows\"\r\n >{{ editTableUpdateLabel }}</el-button\r\n >\r\n <el-button\r\n v-else\r\n type=\"primary\"\r\n icon=\"el-icon-close\"\r\n size=\"mini\"\r\n @click=\"cancelTableRows\"\r\n >{{ editTableCancelLabel }}</el-button\r\n >\r\n </template>\r\n </template>\r\n <el-button\r\n v-if=\"option.isExport\"\r\n type=\"primary\"\r\n class=\"exportBtn\"\r\n icon=\"el-icon-download\"\r\n @click=\"exportTable\"\r\n >导出</el-button\r\n >\r\n <el-dropdown\r\n size=\"small\"\r\n v-if=\"option.isDColumn\"\r\n :hide-on-click=\"false\"\r\n class=\"el-dropdown-DColumn\"\r\n trigger=\"click\"\r\n >\r\n <el-button icon=\"el-icon-setting\" type=\"primary\" class=\"mftcc-table-dropdown\"\r\n >设置</el-button\r\n >\r\n <el-dropdown-menu slot=\"dropdown\" style=\"text-align: center\">\r\n <div style=\"text-align: left\">\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-dropdown-item :key=\"index\" v-if=\"col.prop != ''\">\r\n <el-checkbox\r\n :checked=\"col.isShow\"\r\n v-model=\"col.isShow\"\r\n @change=\"checkChange(col)\"\r\n >{{ col.label }}</el-checkbox\r\n >\r\n </el-dropdown-item>\r\n </template>\r\n </div>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"mftcc-form-tools\" v-if=\"option.modelType == 'dynamicModel'\">\r\n <div class=\"mftcc-form-tools-item\">\r\n <div class=\"tabs\" v-if=\"option.queryTabs && option.queryTabs.length > 0\">\r\n <el-tabs v-model=\"option.tabActiveName\" @tab-click=\"queryTabClick\">\r\n <el-tab-pane\r\n v-for=\"tab in option.queryTabs\"\r\n :key=\"tab.id\"\r\n :label=\"tab.label\"\r\n :name=\"tab.id\"\r\n >\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n </div>\r\n <div class=\"mftcc-form-tools-item\">\r\n <div class=\"dynamicQuery\" v-if=\"option.isDynamicQuery\">\r\n <el-input\r\n placeholder=\"请输入查询条件\"\r\n v-model=\"dynamicQuery\"\r\n @keyup.enter.native=\"searchTableData\"\r\n >\r\n <i\r\n slot=\"suffix\"\r\n @click=\"searchTableData\"\r\n class=\"el-input__icon el-icon-search\"\r\n ></i>\r\n </el-input>\r\n </div>\r\n <div class=\"sysBtns\" v-if=\"option.isExport || option.isDColumn\">\r\n <template v-if=\"option.isEdit\">\r\n <el-button\r\n type=\"primary\"\r\n icon=\"el-icon-plus\"\r\n size=\"mini\"\r\n @click=\"addTableRow\"\r\n >{{ editTableInsertLabel }}</el-button\r\n >\r\n <el-button\r\n type=\"primary\"\r\n icon=\"el-icon-check\"\r\n size=\"mini\"\r\n @click=\"saveTableRows\"\r\n >{{ editTableSaveLabel }}</el-button\r\n >\r\n <template v-if=\"option.editType == 'all'\">\r\n <el-button\r\n v-if=\"tableIsEdit == false\"\r\n type=\"primary\"\r\n icon=\"el-icon-edit\"\r\n size=\"mini\"\r\n @click=\"editTableRows\"\r\n >{{ editTableUpdateLabel }}</el-button\r\n >\r\n <el-button\r\n v-else\r\n type=\"primary\"\r\n icon=\"el-icon-close\"\r\n size=\"mini\"\r\n @click=\"cancelTableRows\"\r\n >{{ editTableCancelLabel }}</el-button\r\n >\r\n </template>\r\n </template>\r\n <el-button\r\n v-if=\"option.isExport\"\r\n type=\"primary\"\r\n class=\"exportBtn\"\r\n icon=\"el-icon-download\"\r\n @click=\"exportTable\"\r\n >导出</el-button\r\n >\r\n <el-dropdown\r\n size=\"small\"\r\n v-if=\"option.isDColumn\"\r\n :hide-on-click=\"false\"\r\n class=\"el-dropdown-DColumn\"\r\n trigger=\"click\"\r\n >\r\n <el-button icon=\"el-icon-setting\" type=\"primary\" class=\"mftcc-table-dropdown\"\r\n >设置</el-button\r\n >\r\n <el-dropdown-menu slot=\"dropdown\" style=\"text-align: center\">\r\n <div style=\"text-align: left\">\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-dropdown-item :key=\"index\" v-if=\"col.prop != ''\">\r\n <el-checkbox\r\n :checked=\"col.isShow\"\r\n v-model=\"col.isShow\"\r\n @change=\"checkChange(col)\"\r\n >{{ col.label }}</el-checkbox\r\n >\r\n </el-dropdown-item>\r\n </template>\r\n </div>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n v-loading=\"isLoading\"\r\n ref=\"mftccTable\"\r\n :class=\"option.query === 'query' ? 'mftcc-table-query' : 'mftcc-table'\"\r\n >\r\n <el-form :rules=\"rules\" :model=\"option\" ref=\"ruleForm\">\r\n <el-table\r\n :data=\"option.tableData\"\r\n :max-height=\"maxHeight\"\r\n :height=\"height\"\r\n highlight-current-row\r\n :ref=\"option.tableId\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无数据\"\r\n :row-key=\"option.treeKey\"\r\n :tree-props=\"{ children: 'children', hasChildren: 'hasChildren' }\"\r\n :row-style=\"rowStyle\"\r\n :row-class-name=\"rowClassName\"\r\n :cell-style=\"cellStyle\"\r\n :cell-class-name=\"cellClassName\"\r\n :class=\"option.isExpand ? 'isExpand' : ''\"\r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n @row-dblclick=\"rowDblclick\"\r\n @expand-change=\"expandChange\"\r\n >\r\n <el-table-column\r\n v-if=\"option.isSelect != '' && option.isSelect ? option.isSelect : false\"\r\n type=\"selection\"\r\n fixed\r\n width=\"55\"\r\n >\r\n </el-table-column>\r\n <el-table-column v-if=\"option.isExpand\" type=\"expand\">\r\n <template slot-scope=\"scope\">\r\n <mftcc-form\r\n :initData=\"expandFormData\"\r\n :parentVm=\"this\"\r\n :ref=\"'expandForm_' + scope.$index\"\r\n :class=\"option.expandType == 'edit' ? 'expandEditForm' : ''\"\r\n ></mftcc-form>\r\n <template v-if=\"option.expandType == 'edit'\">\r\n <div style=\"text-align: center; margin-top: 5px\">\r\n <el-button type=\"primary\" @click=\"saveExpandFormData(scope.$index)\"\r\n >保存</el-button\r\n >\r\n <el-button @click=\"closeExpand(scope.$index)\">取消</el-button>\r\n </div>\r\n </template>\r\n </template>\r\n </el-table-column>\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-table-column\r\n v-if=\"col.prop != '' ? col.isShow : false\"\r\n :key=\"index\"\r\n :prop=\"col.prop\"\r\n :label=\"col.label\"\r\n :show-overflow-tooltip=\"\r\n col['show-overflow-tooltip'] === true ? true : false\r\n \"\r\n :min-width=\"col.minWidth\"\r\n :fixed=\"col.fixed || false\"\r\n :align=\"col.align || 'left'\"\r\n :width=\"col.width\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <template v-if=\"scope.row.isEdit === true && !col.disableEdit\">\r\n <el-form-item\r\n :prop=\"'tableData.' + scope.$index + '.' + col.prop\"\r\n :rules=\"rules[col.prop]\"\r\n >\r\n <component\r\n :is=\"$Component[col.fieldType]\"\r\n v-model=\"scope.row[col.prop]\"\r\n :props=\"col\"\r\n :designer=\"true\"\r\n >\r\n </component>\r\n </el-form-item>\r\n </template>\r\n <template v-else-if=\"col.isHref === true\">\r\n <template v-if=\"col.href.path\">\r\n <a href=\"javascript:void(0)\" @click=\"router(col.href, scope.row)\">{{\r\n tableFormatter(scope.row[col.prop], col)\r\n }}</a>\r\n </template>\r\n <template v-else-if=\"col.href.callbackType\">\r\n <a\r\n href=\"javascript:void(0)\"\r\n @click=\"Fn(col.href.callbackType, scope.$index, scope.row)\"\r\n >{{ tableFormatter(scope.row[col.prop], col) }}</a\r\n >\r\n </template>\r\n <template v-else>\r\n <span>{{ tableFormatter(scope.row[col.prop], col) }}</span>\r\n </template>\r\n </template>\r\n <template v-else-if=\"col.fieldType === 'switch'\">\r\n <el-switch\r\n v-model=\"scope.row[col.prop]\"\r\n :active-value=\"\r\n switchValue(scope.row[col.prop], col.switchValue.activeValue, true)\r\n \"\r\n :inactive-value=\"\r\n switchValue(\r\n scope.row[col.prop],\r\n col.switchValue.inActiveValue,\r\n false\r\n )\r\n \"\r\n :disabled=\"\r\n isEmpty(col.switchValue.readOnly) ? false : col.switchValue.readOnly\r\n \"\r\n @change=\"Fn(col.switchValue.changeEvent, scope.$index, scope.row)\"\r\n ></el-switch>\r\n </template>\r\n <template v-else>\r\n <span>{{ tableFormatter(scope.row[col.prop], col) }}</span>\r\n </template>\r\n </template>\r\n </el-table-column>\r\n </template>\r\n <el-table-column\r\n v-if=\"option.isOptBtns === true\"\r\n :fixed=\"option.isExpand ? false : 'right'\"\r\n label=\"操作\"\r\n align=\"center\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <template v-for=\"(btn, index) in option.optBtns\">\r\n <el-button\r\n :key=\"index\"\r\n size=\"mini\"\r\n :disabled=\"buttonAuth(btn, scope.row)\"\r\n v-if=\"$hasPerm(btn.perm || true)\"\r\n @click=\"Fn(btn.callback, scope.$index, scope.row)\"\r\n >{{ btn.label }}</el-button\r\n >\r\n </template>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-form>\r\n <el-pagination\r\n v-if=\"option.isPagination\"\r\n background\r\n :hide-on-single-page=\"option.isNoDataPagination\"\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n :page-size=\"pageSize\"\r\n :current-page=\"pageNo\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n :total=\"pageTotal\"\r\n >\r\n </el-pagination>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { postJsonNoLoading, postJson, getParameter } from \"../../../axios\";\r\nimport formUtil from \"../../../utils/formUtil\";\r\nexport default {\r\n data() {\r\n return {\r\n option: {},\r\n searchData: {},\r\n maxHeight: null,\r\n height: null,\r\n pageNo: 1,\r\n pageSize: 10,\r\n pageTotal: 0,\r\n currentRow: null,\r\n isEmpty: formUtil.isEmpty,\r\n pramDicItem: {},\r\n exportHeader: [],\r\n exportField: [],\r\n dynamicQuery: \"\",\r\n oldTabActiveName: \"\",\r\n isLoading: false,\r\n queryModelShow: false,\r\n editWatch: null,\r\n editTableData: null,\r\n tableIsEdit: false,\r\n editTableInsertLabel: \"新增行\",\r\n editTableSaveLabel: \"保存\",\r\n editTableUpdateLabel: \"编辑\",\r\n editTableCancelLabel: \"取消\",\r\n rules: {},\r\n expandFormData: {},\r\n };\r\n },\r\n props: {\r\n tableId: {\r\n type: String,\r\n required: \"\",\r\n },\r\n initData: {\r\n type: Object,\r\n },\r\n initSearchData: {\r\n type: Object,\r\n default: function () {\r\n return {};\r\n },\r\n },\r\n parentVm: {\r\n type: Object,\r\n required: true,\r\n },\r\n },\r\n watch: {\r\n tableId: {\r\n handler(val, oldVal) {\r\n if (val) {\r\n this.initTable(() => {\r\n this.$emit(\"callback\");\r\n });\r\n }\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n initData: {\r\n handler(val, oldVal) {\r\n if (!this.tableId && val) {\r\n this.initTable();\r\n }\r\n },\r\n immediate: true,\r\n },\r\n },\r\n methods: {\r\n isNumber(val) {\r\n var regPos = /^\\d+(\\.\\d+)?$/; //非负浮点数\r\n var regNeg = /^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数\r\n if (regPos.test(val) || regNeg.test(val)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n switchValue(value, prop, state) {\r\n if (this.isEmpty(prop)) {\r\n return state;\r\n }\r\n if (typeof value == \"number\") {\r\n return Number(prop);\r\n }\r\n return prop;\r\n },\r\n queryTabClick(tab, event) {\r\n let tabData = this.option.queryTabs[tab.index];\r\n let data = {};\r\n if (!this.isEmpty(tabData.fieldName)) {\r\n data[tabData.fieldName] = tabData.value;\r\n }\r\n if (this.oldTabActiveName) {\r\n let tabs = this.option.queryTabs.filter(\r\n (item) => item.id == this.oldTabActiveName\r\n );\r\n if (tabs.length > 0) {\r\n delete this.searchData[tabs[0].fieldName];\r\n }\r\n }\r\n this.oldTabActiveName = tabData.id;\r\n this.search(data);\r\n },\r\n searchTableData() {\r\n this.search();\r\n },\r\n resetSearchData() {\r\n this.searchData = {};\r\n this.$nextTick(() => {\r\n this.$refs.searchForm.resetFields();\r\n this.$nextTick(() => {\r\n this.searchTableData();\r\n });\r\n });\r\n },\r\n rowStyle(obj) {\r\n let event = this.option[\"row-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n rowClassName(obj) {\r\n let event = this.option[\"row-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n cellStyle(obj) {\r\n let event = this.option[\"cell-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n cellClassName(obj) {\r\n let event = this.option[\"cell-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n buttonAuth(btn, row) {\r\n let buttonAuth = false;\r\n let auth = btn.noShowParams || \"\";\r\n let authArray = auth.split(\";\");\r\n for (let i in authArray) {\r\n if (!this.isEmpty(authArray[i])) {\r\n let authObj = authArray[i].split(\"-\");\r\n if (authObj.length === 2) {\r\n if (\r\n this.$store.getters.buttonAuth &&\r\n this.$store.getters.buttonAuth[authObj[0]] == authObj[1]\r\n ) {\r\n buttonAuth = true;\r\n } else if (row[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n }\r\n }\r\n }\r\n }\r\n return buttonAuth;\r\n },\r\n tableFormatter(cellValue, item) {\r\n let _this = this;\r\n let value = \"\";\r\n if (_this.isEmpty(cellValue)) {\r\n return cellValue;\r\n } else {\r\n value = cellValue;\r\n }\r\n let parmArray = _this.pramDicItem[item.prop];\r\n if (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\") {\r\n let checkBoxValue = \"\";\r\n let checkArray;\r\n if (Array.isArray(cellValue)) {\r\n checkArray = cellValue;\r\n } else {\r\n checkArray = cellValue.split(\"|\");\r\n }\r\n for (let h in checkArray) {\r\n if (!_this.isEmpty(checkArray[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === checkArray[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (item.fieldType === \"text\") {\r\n if (item.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(cellValue);\r\n } else if (item.dataType === \"money(wan)\") {\r\n value = formUtil.formatMoney(Number(cellValue) / 10000, 4);\r\n } else if (item.dataType === \"percentile\") {\r\n value = formUtil.numMulti(cellValue, 100) + \"%\";\r\n } else if (item.dataType === \"thousand\") {\r\n value = formUtil.numMulti(cellValue, 1000) + \"‰\";\r\n } else if (item.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(cellValue, 10000) + \"‱\";\r\n }\r\n } else if (item.fieldType === \"date\" || item.fieldType === \"dateGroup\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd\";\r\n let format = \"yyyy-MM-dd\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else if (item.fieldType === \"datetime\" || item.fieldType === \"datetimeGroup\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n let format = \"yyyy-MM-dd HH:mm:ss\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === cellValue) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n if (\r\n !_this.isEmpty(item.formatter) &&\r\n formUtil.parentVmExist(this, item.formatter)\r\n ) {\r\n value = this.parentVm._self[item.formatter](value);\r\n } else if (!_this.isEmpty(item.desensitization)) {\r\n value = formUtil.desensitization(value, item.desensitization);\r\n }\r\n return value;\r\n },\r\n Fn(method, index, row) {\r\n // this[method](index, row);\r\n //this.$emit('callback', method, index, row);\r\n if (formUtil.parentVmExist(this, method)) {\r\n this.parentVm._self[method](index, row);\r\n }\r\n },\r\n router(href, row) {\r\n let path = href.path;\r\n let query = {};\r\n let queryArr = href.query.split(\";\");\r\n for (let queryStr of queryArr) {\r\n let arr = queryStr.split(\"-\");\r\n let key = arr[0];\r\n let value = arr[1];\r\n if (value.startsWith(\"${\")) {\r\n value = value.substring(2, value.length - 1);\r\n }\r\n query[key] = row[value];\r\n }\r\n this.$router.push({ path: path, query: query });\r\n },\r\n tableResize() {\r\n if (this.option.isAutoHeight || this.option.height == \"auto\") {\r\n if (this.option.query == \"query\") {\r\n return;\r\n }\r\n if (!this.maxHeight) {\r\n this.maxHeight = this.$refs.mftccTable.offsetHeight;\r\n if (this.option.isPagination === true) {\r\n if ((this.maxHeight + \"\").endsWith(\"px\")) {\r\n this.maxHeight =\r\n Number(this.maxHeight.substring(0, this.maxHeight.length - 2)) - 40;\r\n } else {\r\n this.maxHeight = Number(this.maxHeight) - 40;\r\n }\r\n }\r\n if (this.maxHeight <= 0) {\r\n this.maxHeight = null;\r\n }\r\n }\r\n } else {\r\n this.height = this.option.height;\r\n this.maxHeight = this.option.maxHeight;\r\n }\r\n },\r\n getTableData(pageNo, pageSize, callback) {\r\n if (this.option.isLoading) {\r\n this.isLoading = true;\r\n }\r\n let tableSearchData = Object.assign({}, this.searchData);\r\n if (tableSearchData.dynamicQuery) {\r\n this.dynamicQuery = tableSearchData.dynamicQuery;\r\n }\r\n for (let key in tableSearchData) {\r\n if (typeof tableSearchData[key] == \"object\") {\r\n tableSearchData[key] = JSON.stringify(tableSearchData[key]);\r\n }\r\n }\r\n if (this.option.isPagination === true) {\r\n tableSearchData.pageNo = pageNo;\r\n tableSearchData.pageSize = pageSize;\r\n } else {\r\n tableSearchData.pageNo = 1;\r\n tableSearchData.pageSize = -1;\r\n }\r\n this.option.tableData = [];\r\n tableSearchData.dynamicQuery = this.dynamicQuery;\r\n tableSearchData.tableId = this.tableId;\r\n tableSearchData.initQuery = JSON.stringify(this.initSearchData);\r\n\r\n let url = this.option.url;\r\n if (url) {\r\n let urlArr = url.split(\"/\");\r\n let serverName = urlArr[0];\r\n if (!serverName) {\r\n urlArr.splice(0, 1);\r\n serverName = urlArr[0];\r\n }\r\n if (serverName.startsWith(\"mftcc-\")) {\r\n let serverType = serverName.split(\"-\")[1];\r\n if ($servers[serverType]) {\r\n urlArr.splice(0, 1);\r\n url = $servers[serverType] + \"/\" + urlArr.join(\"/\");\r\n }\r\n }\r\n postJsonNoLoading(\r\n url,\r\n tableSearchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n let dataList = res.list;\r\n this.option.tableData = dataList.records || dataList;\r\n this.option.tableData = this.resTreeData(this.option.tableData);\r\n this.editTableData = this.clone(this.option.tableData);\r\n this.pageNo = dataList.current; // 当前页数\r\n this.pageSize = dataList.size; // 每页数量\r\n this.pageTotal = dataList.total; // 页面总数\r\n let colList = res.colList;\r\n if (colList && colList.length > 0) {\r\n this.option.columns = colList;\r\n }\r\n }\r\n this.isLoading = false;\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n this.$nextTick(() => {\r\n this.$emit(\"initCallBack\", this);\r\n });\r\n },\r\n (error) => {\r\n this.isLoading = false;\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n this.$nextTick(() => {\r\n this.$emit(\"initCallBack\", this);\r\n });\r\n }\r\n );\r\n }\r\n },\r\n resTreeData(data) {\r\n if (!this.option.isTree) {\r\n return data;\r\n }\r\n let result = [];\r\n for (let node of data) {\r\n if (!node[this.option.treeParentKey] || node[this.option.treeParentKey] == \"0\") {\r\n node.children = this.getTreeChilds(node[this.option.treeKey], data);\r\n result.push(node);\r\n }\r\n }\r\n return result;\r\n },\r\n getTreeChilds(id, data) {\r\n let childs = [];\r\n for (let node of data) {\r\n if (node[this.option.treeParentKey] == id) {\r\n childs.push(node);\r\n }\r\n }\r\n for (let child of childs) {\r\n let childs2 = this.getTreeChilds(child[this.option.treeKey], data); //递归获取子节点\r\n if (childs2.length > 0) {\r\n child.children = childs2;\r\n }\r\n }\r\n return childs;\r\n },\r\n refresh() {\r\n this.getTableData(this.pageNo, this.pageSize);\r\n },\r\n search(searchData) {\r\n this.pageNo = 1;\r\n this.pageSize = 10;\r\n this.pageTotal = 0;\r\n this.currentRow = null;\r\n if (!this.isEmpty(searchData)) {\r\n Object.assign(this.searchData, searchData);\r\n }\r\n this.getTableData(this.pageNo, this.pageSize);\r\n },\r\n handleSizeChange(val) {\r\n this.getTableData(1, val);\r\n },\r\n handleCurrentChange(val) {\r\n this.getTableData(val, this.pageSize);\r\n },\r\n checkChange(col) {\r\n console.log(col);\r\n },\r\n setSelectValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].clearSelection();\r\n } else if (arguments.length === 1) {\r\n this.setSelectValue(this.option.selectKey, arguments[0]);\r\n } else if (arguments.length === 2) {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(tableDatas[i]);\r\n }\r\n }\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(\r\n tableDatas[i],\r\n arguments[2]\r\n );\r\n }\r\n }\r\n }\r\n },\r\n getSelectValue() {\r\n let parmKeyArray = this.$refs[this.option.tableId].store.states.selection;\r\n return parmKeyArray;\r\n },\r\n setCurrentValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].setCurrentRow();\r\n } else if (arguments.length === 1) {\r\n this.setCurrentValue(this.option.selectKey, arguments[0]);\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n tableDatas[i][selectKey] === arguments[1]\r\n ) {\r\n this.$refs[this.option.tableId].setCurrentRow(tableDatas[i]);\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n getCurrentValue() {\r\n return this.currentRow;\r\n },\r\n currentChange(currentRow, oldCurrentRow) {\r\n this.currentRow = currentRow;\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n async initTable(callback) {\r\n let _this = this;\r\n this.option = {};\r\n this.maxHeight = null;\r\n this.height = null;\r\n this.pageNo = 1;\r\n this.pageSize = 10;\r\n this.pageTotal = 0;\r\n this.currentRow = null;\r\n this.queryModelShow = false;\r\n this.searchData = {};\r\n try {\r\n let jsonData;\r\n if (this.tableId) {\r\n jsonData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/table/\" + this.tableId + \".json\"\r\n );\r\n }\r\n if (jsonData) {\r\n this.option = JSON.parse(JSON.stringify(jsonData.data));\r\n } else {\r\n this.option = JSON.parse(JSON.stringify(this.$busDatas[this.tableId]));\r\n }\r\n } catch (error) {\r\n if (_this.initData === undefined) {\r\n this.$message.error(\r\n \"未找到 [ \" + this.tableId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n }\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n if (_this.initData !== undefined) {\r\n this.option = Object.assign(this.option, this.initData);\r\n }\r\n this.searchData = Object.assign(this.searchData, this.initSearchData || {});\r\n if (this.option.modelType == \"dynamicModel\" && this.option.queryTabs.length > 0) {\r\n let tabs = this.option.queryTabs.filter(\r\n (item) => item.id == this.option.tabActiveName\r\n );\r\n if (tabs.length > 0 && !this.isEmpty(tabs[0].fieldName)) {\r\n this.searchData[tabs[0].fieldName] = tabs[0].value;\r\n this.oldTabActiveName = this.option.tabActiveName;\r\n }\r\n }\r\n if (this.option.modelType == \"queryModel\") {\r\n let columns = this.option.columns.filter((item) => item.isQuery === true);\r\n for (let col of columns) {\r\n this.$set(this.searchData, col.prop, col.value);\r\n }\r\n /* 判断是否存在固定列查询 */\r\n for (let col of this.option.columns) {\r\n if (col.isQuery) {\r\n this.queryModelShow = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let formItem = this.option.columns;\r\n let dicKeyArray = [];\r\n for (let i in formItem) {\r\n if (formItem[i].prop !== \"\") {\r\n //解析字典项\r\n let dicKey = formItem[i].dicKey;\r\n if (!this.isEmpty(dicKey) && formItem[i].optionType == \"2\") {\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = formItem[i].prop;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n this.$set(this.pramDicItem, formItem[i].prop, formItem[i].dicItem);\r\n }\r\n\r\n //获取库中选择字典\r\n if (\r\n formItem[i].optionType == \"3\" &&\r\n (formItem[i].fieldType === \"select\" ||\r\n formItem[i].fieldType === \"multipleSelection\") &&\r\n formItem[i].dataType === \"library\"\r\n ) {\r\n getParameter(formItem[i].library.url, { query: \"\" }, true, (reponse) => {\r\n if (reponse.code === 0) {\r\n let parmArray = [];\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (!this.isEmpty(formItem[i].library.realField)) {\r\n realField = formItem[i].library.realField;\r\n }\r\n if (!this.isEmpty(formItem[i].library.showField)) {\r\n showField = formItem[i].library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n optCode: list[i][realField],\r\n optName: list[i][showField],\r\n };\r\n parmArray.push(option);\r\n }\r\n this.$set(this.pramDicItem, formItem[i].prop, parmArray);\r\n }\r\n });\r\n }\r\n //解析校验规则\r\n this.resRules(formItem[i]);\r\n }\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n }\r\n });\r\n\r\n let url = this.option.url;\r\n if (url !== undefined && url !== null && url !== \"\") {\r\n this.getTableData(this.pageNo, this.pageSize, callback);\r\n } else {\r\n if (typeof callback === \"function\") {\r\n this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n this.$nextTick(() => {\r\n this.$emit(\"initCallBack\", this);\r\n });\r\n }\r\n\r\n if (this.option.isExpand) {\r\n const formId = this.option.expandFormId;\r\n try {\r\n let formData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/form/\" + formId + \".json\"\r\n );\r\n if (formData) {\r\n this.expandFormData = formData.data;\r\n } else {\r\n this.expandFormData = this.$busDatas[_this.formId];\r\n }\r\n } catch (error) {\r\n this.$message.error(\"未找到 [ \" + formId + \" ] 配置文件或配置文件格式错误\");\r\n }\r\n\r\n if (this.option.expandType == \"readOnly\") {\r\n this.expandFormData.query = \"query\";\r\n } else if (this.option.expandType == \"edit\") {\r\n this.expandFormData.formDisabled = null;\r\n }\r\n this.expandFormData.isExpand = true;\r\n }\r\n },\r\n exportTable() {\r\n this.$confirm(\"确定要导出当前列表全部数据?\", \"提示\", {\r\n dangerouslyUseHTMLString: true,\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n })\r\n .then(() => {\r\n this.getExpportData();\r\n })\r\n .catch(() => {});\r\n },\r\n getExpportData() {\r\n let loading = this.$loading({\r\n lock: true,\r\n text: \"正在拼命导出......\",\r\n spinner: \"el-icon-loading\",\r\n background: \"rgba(0, 0, 0, 0.7)\",\r\n });\r\n\r\n let tableSearchData = Object.assign({}, this.searchData);\r\n for (let key in tableSearchData) {\r\n if (typeof tableSearchData[key] == \"object\") {\r\n tableSearchData[key] = JSON.stringify(tableSearchData[key]);\r\n }\r\n }\r\n tableSearchData.pageNo = 1;\r\n tableSearchData.pageSize = -1;\r\n tableSearchData.dynamicQuery = this.dynamicQuery;\r\n tableSearchData.tableId = this.option.tableId;\r\n tableSearchData.initQuery = JSON.stringify(this.initSearchData);\r\n\r\n findByPage(\r\n this.option.url,\r\n tableSearchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0 && res.list.records.length > 0) {\r\n require.ensure([], () => {\r\n /* eslint-disable */\r\n // 这里的径路要修改正确\r\n const {\r\n export_json_to_excel,\r\n } = require(\"../../../plugins/Export2Excel.js\");\r\n /* eslint-enable */\r\n for (let c in this.option.columns) {\r\n if (this.option.columns[c].prop != \"\") {\r\n this.exportField.push(this.option.columns[c].prop);\r\n this.exportHeader.push(this.option.columns[c].label);\r\n }\r\n }\r\n let tableData = res.list.records;\r\n const data = this.formatJson(this.option.columns, tableData);\r\n export_json_to_excel(this.exportHeader, data, this.tableId);\r\n loading.close();\r\n });\r\n } else {\r\n this.$alert(res.msg, this.$alertTitle, {\r\n type: res.msgType,\r\n dangerouslyUseHTMLString: true,\r\n });\r\n loading.close();\r\n }\r\n },\r\n (error) => {\r\n console.log(error);\r\n loading.close();\r\n }\r\n );\r\n },\r\n formatJson(columns, tableData) {\r\n let data = tableData.map((data) => {\r\n return columns.map((col) => {\r\n if (col.prop != \"\") {\r\n let value = data[col.prop];\r\n return this.tableFormatter(value, col);\r\n } else {\r\n return null;\r\n }\r\n });\r\n });\r\n return data;\r\n },\r\n addTableRow() {\r\n let rowData = {};\r\n for (const columns of this.option.columns) {\r\n if (columns.prop) {\r\n rowData[columns.prop] = \"\";\r\n }\r\n }\r\n rowData.isEdit = true;\r\n rowData.isNewRow = true;\r\n this.option.tableData.push(rowData);\r\n this.$nextTick(function () {\r\n this.$refs[this.option.tableId];\r\n let bodyWrapper = this.$refs[this.option.tableId].$refs.bodyWrapper;\r\n bodyWrapper.scrollTop = bodyWrapper.scrollHeight;\r\n });\r\n },\r\n saveTableRows() {\r\n this.$confirm(\"确定要保存修改后的数据吗?\", \"提示\", {\r\n dangerouslyUseHTMLString: true,\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n })\r\n .then(() => {\r\n this.saveEditTable();\r\n })\r\n .catch(() => {});\r\n },\r\n saveEditTable() {\r\n const multipleSelection = {};\r\n for (const columns of this.option.columns) {\r\n if (columns.prop && columns.fieldType == \"multipleSelection\") {\r\n multipleSelection[columns.prop] = true;\r\n }\r\n }\r\n let insertTableData = [];\r\n let updateTableData = [];\r\n let tableData = this.clone(this.option.tableData);\r\n for (const r in tableData) {\r\n let row = tableData[r];\r\n for (const key in multipleSelection) {\r\n let value = row[key];\r\n if (Array.isArray(value)) {\r\n row[key] = value.join(\"|\");\r\n }\r\n }\r\n if (row.isEdit === true) {\r\n delete row.isEdit;\r\n if (row.isNewRow === true) {\r\n delete row.isNewRow;\r\n insertTableData.push(row);\r\n } else if (row.isEditRow === true) {\r\n delete row.isEditRow;\r\n updateTableData.push(row);\r\n }\r\n }\r\n }\r\n // console.log(insertTableData, updateTableData);\r\n if (insertTableData.length > 0 || updateTableData.length > 0) {\r\n this.$refs.ruleForm.validate((valid, object) => {\r\n if (valid) {\r\n postJson(\r\n this.option.editUrl,\r\n {\r\n insertData: insertTableData,\r\n updateData: updateTableData,\r\n editType: this.option.editType,\r\n },\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n for (const r in this.option.tableData) {\r\n let row = this.option.tableData[r];\r\n if (row.isEdit === true) {\r\n delete row.isEdit;\r\n if (row.isNewRow === true) {\r\n delete row.isNewRow;\r\n } else if (row.isEditRow === true) {\r\n delete row.isEditRow;\r\n }\r\n this.$set(this.option.tableData, r, row);\r\n }\r\n }\r\n this.editTableData = this.clone(this.option.tableData);\r\n this.$message.success(res.msg || \"保存成功\");\r\n let trDivs = document.querySelectorAll(\"tr[active=true]\");\r\n for (let i = 0; i < trDivs.length; i++) {\r\n trDivs[i].removeAttribute(\"active\");\r\n }\r\n this.tableIsEdit = false;\r\n }\r\n },\r\n (error) => {\r\n this.$message.error(error);\r\n }\r\n );\r\n } else {\r\n let validateMsg = [];\r\n for (let key in object) {\r\n let arr = object[key];\r\n for (let data of arr) {\r\n validateMsg.push(data.message);\r\n }\r\n }\r\n this.$message({\r\n duration: 5000,\r\n showClose: true,\r\n dangerouslyUseHTMLString: true,\r\n customClass: \"errorMessage\",\r\n message: validateMsg.join(\"<br/>\"),\r\n type: \"error\",\r\n });\r\n return false;\r\n }\r\n });\r\n } else {\r\n for (const r in this.option.tableData) {\r\n let row = this.option.tableData[r];\r\n if (row.isEdit === true) {\r\n delete row.isEdit;\r\n this.$set(this.option.tableData, r, row);\r\n }\r\n }\r\n this.tableIsEdit = false;\r\n }\r\n },\r\n editTableRows() {\r\n this.tableIsEdit = true;\r\n const multipleSelection = {};\r\n for (const columns of this.option.columns) {\r\n if (columns.prop && columns.fieldType == \"multipleSelection\") {\r\n multipleSelection[columns.prop] = true;\r\n }\r\n }\r\n for (const r in this.option.tableData) {\r\n let row = this.option.tableData[r];\r\n for (const key in multipleSelection) {\r\n let value = row[key];\r\n if (Array.isArray(value)) {\r\n row[key] = value;\r\n } else {\r\n row[key] = value.split(\"|\");\r\n }\r\n }\r\n row.isEdit = true;\r\n this.$set(this.option.tableData, r, row);\r\n }\r\n this.editWatcher();\r\n },\r\n cancelTableRows() {\r\n this.option.tableData = this.clone(this.editTableData);\r\n this.tableIsEdit = false;\r\n },\r\n rowDblclick(row, column, event) {\r\n if (!this.option.isEdit || this.option.editType != \"row\") {\r\n return;\r\n }\r\n let rowDiv = event.currentTarget;\r\n if (rowDiv.hasAttribute(\"active\")) {\r\n const rowIndex = rowDiv.rowIndex;\r\n rowDiv.removeAttribute(\"active\");\r\n this.$set(\r\n this.option.tableData,\r\n rowIndex,\r\n this.clone(this.editTableData[rowIndex])\r\n );\r\n return;\r\n } else {\r\n rowDiv.setAttribute(\"active\", true);\r\n }\r\n const multipleSelection = {};\r\n for (const columns of this.option.columns) {\r\n if (columns.prop && columns.fieldType == \"multipleSelection\") {\r\n multipleSelection[columns.prop] = true;\r\n }\r\n }\r\n for (const key in multipleSelection) {\r\n let value = row[key];\r\n if (Array.isArray(value)) {\r\n row[key] = value;\r\n } else {\r\n row[key] = value.split(\"|\");\r\n }\r\n }\r\n this.editWatcher();\r\n this.$set(row, \"isEdit\", true);\r\n },\r\n editWatcher() {\r\n if (this.editWatch != null) {\r\n this.editWatch();\r\n }\r\n this.editWatch = this.$watch(\"option.tableData\", {\r\n handler(val, oldVal) {\r\n for (const i in val) {\r\n let rowData = val[i];\r\n if (\r\n rowData.isEdit &&\r\n !rowData.isNewRow &&\r\n !this.isObjEqual(rowData, this.editTableData[i])\r\n ) {\r\n rowData.isEditRow = true;\r\n }\r\n }\r\n },\r\n deep: true,\r\n });\r\n },\r\n clone(data) {\r\n return JSON.parse(JSON.stringify(data));\r\n },\r\n isObjEqual(o1, o2) {\r\n let object = this.clone(o1);\r\n delete object.isEdit;\r\n delete object.isNewRow;\r\n delete object.isEditRow;\r\n var props1 = Object.getOwnPropertyNames(object);\r\n // var props2 = Object.getOwnPropertyNames(o2);\r\n // if (props1.length != props2.length) {\r\n // return false;\r\n // }\r\n for (var i = 0, max = props1.length; i < max; i++) {\r\n var propName = props1[i];\r\n // if (propName == \"isEdit\" || propName == \"isEditRow\" || propName == \"isNewRow\") {\r\n // continue;\r\n // }\r\n let v1 = o1[propName];\r\n let v2 = o2[propName];\r\n if (Array.isArray(v1)) {\r\n v1 = v1.join(\"|\");\r\n }\r\n if (Array.isArray(v2)) {\r\n v2 = v2.join(\"|\");\r\n }\r\n if (v1 !== v2) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n resRules(formField) {\r\n let formRules = formField.rules;\r\n let label = formField.label;\r\n try {\r\n //解析规则\r\n let fieldNameRules = [];\r\n if (formField.fieldType === \"text\") {\r\n let type = formField.dataType;\r\n if (type === \"int\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateInt;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"long\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateLong;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (\r\n type == \"double(2)\" ||\r\n type == \"double(4)\" ||\r\n type == \"double(6)\" ||\r\n type == \"money(fen)\" ||\r\n type == \"money(jiao)\" ||\r\n type == \"money(wan)\" ||\r\n type == \"money(baiwan)\" ||\r\n type == \"money(yi)\" ||\r\n type == \"percentile\" ||\r\n type === \"thousand\" ||\r\n type == \"tenThousand\"\r\n ) {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateNumber;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"float\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateFloat;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"boolean\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateBoolean;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type === \"money(yuan)\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateMoney;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n }\r\n\r\n for (let k in formRules) {\r\n let fieldNameRule = {};\r\n let trigger = \"change\";\r\n let message = \"\";\r\n let type = \"\";\r\n if (formRules[k].type === \"required\") {\r\n if (!this.isEmpty(formField[\"formItem\"])) {\r\n formField[\"formItem\"].required = true;\r\n }\r\n fieldNameRule[\"required\"] = true;\r\n // trigger = \"blur\";\r\n message = label + \"不能为空\";\r\n } else if (formRules[k].type === \"validator\") {\r\n if (formUtil.parentVmExist(this, formRules[k].validator)) {\r\n fieldNameRule[\"validator\"] = this.parentVm._self[formRules[k].validator];\r\n }\r\n // trigger = \"blur\";\r\n } else if (formRules[k].type === \"number\") {\r\n // trigger = \"blur\";\r\n message = label + \"必须为数字\";\r\n type = \"number\";\r\n } else if (formRules[k].type === \"email\") {\r\n // trigger = \"blur\";\r\n message = label + \"格式不正确\";\r\n type = \"email\";\r\n } else if (formRules[k].type === \"phone\") {\r\n // trigger = \"blur\";\r\n message = \"请输入正确的手机号码\";\r\n fieldNameRule[\"pattern\"] = /^1[123456789]\\d{9}$/;\r\n } else if (formRules[k].type === \"mobile\") {\r\n // trigger = \"blur\";\r\n message = \"请输入正确的电话\";\r\n fieldNameRule[\"pattern\"] = /^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$/;\r\n } else if (formRules[k].type === \"idNo\") {\r\n // trigger = \"blur\";\r\n fieldNameRule[\"validator\"] = formUtil.validateIdNo;\r\n } else {\r\n //continue\r\n }\r\n\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n type = \"array\";\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].min) && !this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message =\r\n label +\r\n \"长度必须大于等于\" +\r\n formRules[k].min +\r\n \"并且小于等于\" +\r\n formRules[k].max;\r\n } else if (!this.isEmpty(formRules[k].min)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n message = label + \"长度必须大于等于\" + formRules[k].min;\r\n } else if (!this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message = label + \"长度必须小于等于\" + formRules[k].max;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].message)) {\r\n message = formRules[k].message;\r\n }\r\n fieldNameRule[\"message\"] = message;\r\n\r\n if (!this.isEmpty(type)) {\r\n fieldNameRule[\"type\"] = type;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].trigger)) {\r\n trigger = formRules[k].trigger;\r\n }\r\n fieldNameRule[\"trigger\"] = trigger;\r\n\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n this.$set(this.rules, formField.prop, fieldNameRules);\r\n } catch (error) {\r\n console.error(\"规则解析错误:\" + error);\r\n this.$set(this.rules, formField.prop, []);\r\n }\r\n },\r\n expandChange(row, expanded) {\r\n if (!this.option.isExpand) {\r\n return;\r\n }\r\n if (!row.isExpand) {\r\n let rowIndex = null;\r\n for (const i in this.option.tableData) {\r\n let rowData = this.option.tableData[i];\r\n if (this.isObjEqual(rowData, row)) {\r\n rowIndex = i;\r\n break;\r\n }\r\n }\r\n if (rowIndex == null) {\r\n return;\r\n }\r\n this.$nextTick(() => {\r\n let form = this.$refs[\"expandForm_\" + rowIndex];\r\n form.setFormValue(this.clone(row));\r\n });\r\n row.isExpand = true;\r\n } else {\r\n delete row.isExpand;\r\n }\r\n },\r\n closeExpand(index) {\r\n this.$refs[this.option.tableId].toggleRowExpansion(\r\n this.option.tableData[index],\r\n false\r\n );\r\n },\r\n saveExpandFormData(index) {\r\n const formId = \"expandForm_\" + index;\r\n let form = this.$refs[formId];\r\n form.validateForm((state) => {\r\n if (state) {\r\n let data = form.getFormValue();\r\n const url = this.option.expandFormUrl;\r\n if (!url) {\r\n this.$message.warning(\"未配置表单保存请求地址\");\r\n return;\r\n }\r\n postJson(\r\n url,\r\n data,\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n Object.assign(this.option.tableData[index], data);\r\n this.closeExpand(index);\r\n this.$message.success(res.msg);\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n },\r\n (error) => {\r\n this.$message.error(error);\r\n }\r\n );\r\n }\r\n });\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n/* .mftcc-table.nothingModel{\r\n margin-top: 10px;\r\n padding-top: 8px;\r\n} */\r\n.mftcc-table .exportBtn {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-table .mftcc-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table-query .el-table__body,\r\n.mftcc-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n.errorMessage .el-message__content {\r\n line-height: 20px;\r\n}\r\n.errorMessage .el-message__closeBtn {\r\n top: 24px;\r\n}\r\n</style>\r\n"]}
|
|
1
|
+
{"version":3,"sources":["D:/_work/mftcc-platform/rklink-base/src/components/src/components/contextmenu.vue","contextmenu.vue","D:/_work/mftcc-platform/rklink-base/src/components/dialog/src/components/dialog/mftccDialogCheckbox.vue","mftccDialogCheckbox.vue","D:/_work/mftcc-platform/rklink-base/src/components/dialog/src/components/dialog/mftccDialogRadio.vue","mftccDialogRadio.vue","D:/_work/mftcc-platform/rklink-base/src/components/dialog/src/components/dialog/mftccDialogTable.vue","mftccDialogTable.vue","D:/_work/mftcc-platform/rklink-base/src/components/dialog/src/components/dialog/mftccDialogTree.vue","mftccDialogTree.vue","D:/_work/mftcc-platform/rklink-base/src/components/flowable/src/components/flowable/timeLine.vue","timeLine.vue","D:/_work/mftcc-platform/rklink-base/src/components/flowable/src/components/flowable/wkfUserDialog.vue","wkfUserDialog.vue","D:/_work/mftcc-platform/rklink-base/src/components/src/components/mftccIframe.vue","mftccIframe.vue","D:/_work/mftcc-platform/rklink-base/src/components/flowable/src/components/flowable/appDetail.vue","appDetail.vue","D:/_work/mftcc-platform/rklink-base/src/components/flowable/src/components/flowable/bizTimeLine.vue","bizTimeLine.vue","D:/_work/mftcc-platform/rklink-base/src/components/flowable/src/components/flowable/wkfUserDialogForDesign.vue","wkfUserDialogForDesign.vue","D:/_work/mftcc-platform/rklink-base/src/components/form/src/components/form/group.vue","group.vue","D:/_work/mftcc-platform/rklink-base/src/components/form/src/components/form/label.vue","label.vue","D:/_work/mftcc-platform/rklink-base/src/components/form/plugins/src/components/form/plugins/mftccForm.vue","mftccForm.vue","D:/_work/mftcc-platform/rklink-base/src/components/layout/src/components/layout/collapse.vue","collapse.vue","D:/_work/mftcc-platform/rklink-base/src/components/layout/src/components/layout/container.vue","container.vue","D:/_work/mftcc-platform/rklink-base/src/components/src/components/mftccForm.vue","D:/_work/mftcc-platform/rklink-base/src/components/src/components/mftccDialogForm.vue","mftccDialogForm.vue","D:/_work/mftcc-platform/rklink-base/src/components/src/components/mftccTable.vue","mftccTable.vue","D:/_work/mftcc-platform/rklink-base/src/components/src/components/mftccDialogTable.vue","D:/_work/mftcc-platform/rklink-base/src/components/src/components/mftccEditTable.vue","mftccEditTable.vue","D:/_work/mftcc-platform/rklink-base/src/components/src/components/mftccSearch.vue","mftccSearch.vue","D:/_work/mftcc-platform/rklink-base/src/layout/src/layout/Iframe.vue","Iframe.vue","D:/_work/mftcc-platform/rklink-base/src/layout/default/src/layout/default/header.vue","header.vue","D:/_work/mftcc-platform/rklink-base/src/layout/src/layout/menu.vue","menu.vue","D:/_work/mftcc-platform/rklink-base/src/layout/src/layout/tab.vue","tab.vue","D:/_work/mftcc-platform/rklink-base/src/layout/src/layout/main.vue","main.vue","D:/_work/mftcc-platform/rklink-base/src/layout/default/theme/default/header.css","main.css","D:/_work/mftcc-platform/rklink-base/src/layout/default/theme/default/components.css","D:/_work/mftcc-platform/rklink-base/src/layout/default/theme/default/components_query.css","D:/_work/mftcc-platform/rklink-base/src/layout/default/theme/default/components_search.css","D:/_work/mftcc-platform/rklink-base/src/layout/default/theme/default/components_expand.css","D:/_work/mftcc-platform/rklink-base/src/layout/default/theme/default/main.css","D:/_work/mftcc-platform/rklink-base/src/layout/default/theme/default/menu.css","menu.css","D:/_work/mftcc-platform/rklink-base/src/style/transition.css","transition.css","D:/_work/mftcc-platform/rklink-base/src/components/table/plugins/src/components/table/plugins/mftccTable.vue"],"names":[],"mappings":"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","file":"app.css","sourcesContent":["<template>\r\n <ul v-show=\"visible\"\r\n :style=\"{left:position.left+'px',top:position.top+'px'}\" class=\"contextmenu el-dropdown-menu \">\r\n <li class=\"el-dropdown-menu__item\" \r\n v-for=\"(item, index) in (items||[])\"\r\n :key=\"index\"\r\n @click=\"Fn(item)\">{{ item.text }}</li>\r\n </ul>\r\n</template>\r\n<script>\r\n\r\n export default {\r\n data() {\r\n return {\r\n visible: this.show\r\n }\r\n },\r\n props: [\"show\",\"position\",\"items\"],\r\n watch: {\r\n show (value) {\r\n this.visible = this.show;\r\n if (value) {\r\n document.body.addEventListener('click', this.closeMenu)\r\n } else {\r\n document.body.removeEventListener('click', this.closeMenu)\r\n }\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n Fn(item) {\r\n this.$emit('callback', item);\r\n this.closeMenu();\r\n },\r\n closeMenu(){\r\n this.$emit('update:show', false);\r\n this.visible = false;\r\n }\r\n }\r\n }\r\n</script>\r\n<style scoped>\r\n.contextmenu{\r\n position: absolute;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.contextmenu{\r\n position: absolute;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n class=\"mftcc-checkbox-dialog\"\r\n :width=\"option.width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n :show=\"show\">\r\n <div slot=\"title\" class=\"dialog-header\" style=\"display: flex;justify-content: flex-end;\">\r\n <label style=\"position: absolute;left: 20px;\">{{ option.title||title }}</label>\r\n <el-input \r\n autocomplete=\"off\"\r\n placeholder=\"请输入关键字\"\r\n suffix-icon=\"el-icon-search\"\r\n v-if=\"(option.search===undefined)?true:option.search\"\r\n v-model=\"searchData\"\r\n style=\"width: 150px;margin: 0px 30px 0px 0px;\"></el-input>\r\n <el-popover\r\n placement=\"bottom\"\r\n width=\"160\"\r\n v-model=\"addVisible\"\r\n v-if=\"(option.insert===undefined)?true:option.insert\">\r\n <el-form :model=\"addForm\" label-width=\"80px\" size=\"mini\">\r\n <el-form-item label=\"真实值\">\r\n <el-input v-model=\"addForm[option.realField||'value']\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"显示值\">\r\n <el-input v-model=\"addForm[option.showField||'text']\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div style=\"text-align: right; margin: 0\">\r\n <el-button type=\"primary\" size=\"mini\" @click=\"addItem\">确定</el-button>\r\n <el-button size=\"mini\" type=\"text\" @click=\"addVisible = false\">取消</el-button>\r\n </div>\r\n <el-button \r\n type=\"primary\" \r\n slot=\"reference\"\r\n style=\"margin: 0px 30px 0px 0px;\">新增</el-button>\r\n </el-popover>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <div class=\"data\">\r\n <div v-if=\"option.group===true\" >\r\n <div \r\n v-for=\"(group, index) in (filterData||[])\"\r\n :key=\"index\" >\r\n <el-divider content-position=\"left\">{{ group.name }}</el-divider>\r\n <el-checkbox-group \r\n v-model=\"option.value[index]\" >\r\n <el-checkbox \r\n v-for=\"(item, index) in (group.data||[])\" \r\n :key=\"index\" \r\n :label=\"item.value\">{{item.text}}</el-checkbox>\r\n </el-checkbox-group>\r\n </div>\r\n </div>\r\n <div v-else>\r\n <el-checkbox-group \r\n v-model=\"option.value\" >\r\n <el-checkbox \r\n v-for=\"(item, index) in (filterData||[])\" \r\n :key=\"index\" \r\n :label=\"item.value\">{{item.text}}</el-checkbox>\r\n </el-checkbox-group>\r\n </div>\r\n </div>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {get,postJson} from '../../axios'\r\n export default {\r\n data() {\r\n return {\r\n title: \"多选筛选器\",\r\n searchData: \"\",\r\n visible: this.show,\r\n addVisible: false,\r\n addForm: {}\r\n }\r\n },\r\n props: [\"show\",\"option\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show;\r\n if(this.visible){\r\n this.searchData = \"\";\r\n if(this.option.initPath !== undefined && this.option.initPath !== null && this.option.initPath !== \"\"){\r\n get(this.option.initPath,null,true,res=>{\r\n this.option.data = res.list;\r\n });\r\n }\r\n }\r\n },\r\n addVisible(){\r\n if(this.addVisible){\r\n this.addForm = {}\r\n }\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n addItem(){\r\n if(this.option.group){\r\n this.$message.error(\"分组暂不支持\");\r\n this.addVisible = false;\r\n }else{\r\n let _this = this;\r\n postJson(this.option.insertPath,this.addForm,true,res=>{\r\n _this.option.data.push({\r\n value: _this.addForm[_this.option.realField||'value'],\r\n text: _this.addForm[_this.option.showField||'text']\r\n });\r\n this.addVisible = false;\r\n });\r\n }\r\n },\r\n submit(){\r\n let value = [];\r\n if(this.option.group){\r\n for(let i in this.option.data){\r\n let dataArr = this.option.data[i].data;\r\n let valueArr = this.option.value[i];\r\n let valueData = [];\r\n for(let v in valueArr){\r\n for(let d in dataArr){\r\n if(dataArr[d][this.option.realField||'value'] === valueArr[v]){\r\n valueData.push(dataArr[d]);\r\n }\r\n }\r\n }\r\n value.push(valueData);\r\n }\r\n }else{\r\n for(let v in this.option.value){\r\n for(let d in this.option.data){\r\n if(this.option.data[d][this.option.realField||'value'] === this.option.value[v]){\r\n value.push(this.option.data[d]);\r\n }\r\n }\r\n }\r\n }\r\n this.$emit('callback', value);\r\n this.visible = false;\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.option.height||'600px';\r\n }\r\n },\r\n computed:{\r\n filterData() {\r\n if(this.option.group){\r\n let data = [];\r\n for(let i in this.option.data){\r\n let groupData = this.option.data[i].data;\r\n let groupName = this.option.data[i].name;\r\n let itemData = [];\r\n for(let d in groupData){\r\n let value = groupData[d][this.option.realField||'value'];\r\n let text = groupData[d][this.option.showField||'text'];\r\n if(text.indexOf(this.searchData) != -1){\r\n itemData.push({\r\n value: value,\r\n text: text\r\n });\r\n }\r\n }\r\n let item = {\r\n name: groupName,\r\n data: itemData\r\n };\r\n data.push(item);\r\n }\r\n return data;\r\n }else{\r\n let data = [];\r\n for(let i in this.option.data){\r\n let value = this.option.data[i][this.option.realField||'value'];\r\n let text = this.option.data[i][this.option.showField||'text'];\r\n if(text.indexOf(this.searchData) != -1){\r\n data.push({\r\n value: value,\r\n text: text \r\n });\r\n }\r\n }\r\n return data;\r\n }\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n.mftcc-checkbox-dialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-checkbox-dialog .el-dialog__body{\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-checkbox-dialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.mftcc-checkbox-dialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n class=\"mftcc-radio-dialog\"\r\n :width=\"option.width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n :close-on-click-modal=\"false\"\r\n append-to-body\r\n :show=\"show\">\r\n <div slot=\"title\" class=\"dialog-header\" style=\"display: flex;justify-content: flex-end;\">\r\n <label style=\"position: absolute;left: 20px;\">{{ option.title||title }}</label>\r\n <el-input \r\n autocomplete=\"off\"\r\n placeholder=\"请输入关键字\"\r\n suffix-icon=\"el-icon-search\"\r\n v-if=\"(option.search===undefined)?true:option.search\"\r\n v-model=\"searchData\"\r\n style=\"width: 150px;margin: 0px 30px 0px 0px;\"></el-input>\r\n <el-popover\r\n placement=\"bottom\"\r\n width=\"160\"\r\n v-model=\"addVisible\"\r\n v-if=\"(option.insert===undefined)?true:option.insert\">\r\n <el-form :model=\"addForm\" label-width=\"80px\" size=\"mini\">\r\n <el-form-item label=\"真实值\">\r\n <el-input v-model=\"addForm[option.realField||'value']\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"显示值\">\r\n <el-input v-model=\"addForm[option.showField||'text']\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div style=\"text-align: right; margin: 0\">\r\n <el-button size=\"mini\" type=\"text\" @click=\"addVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" size=\"mini\" @click=\"addItem\">确定</el-button>\r\n </div>\r\n <el-button \r\n type=\"primary\" \r\n slot=\"reference\"\r\n style=\"margin: 0px 30px 0px 0px;\">新增</el-button>\r\n </el-popover>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <div class=\"data\">\r\n <div v-if=\"option.group===true\" >\r\n <div \r\n v-for=\"(group, index) in (filterData||[])\"\r\n :key=\"index\" >\r\n <el-divider content-position=\"left\">{{ group.name }}</el-divider>\r\n <el-radio-group \r\n v-model=\"option.value[index]\" >\r\n <el-radio \r\n v-for=\"(item, index) in (group.data||[])\" \r\n :key=\"index\" \r\n :label=\"item.value\">{{item.text}}</el-radio>\r\n </el-radio-group>\r\n </div>\r\n </div>\r\n <div v-else>\r\n <el-radio-group \r\n v-model=\"option.value\" >\r\n <el-radio \r\n v-for=\"(item, index) in (filterData||[])\" \r\n :key=\"index\" \r\n :label=\"item.value\">{{item.text}}</el-radio>\r\n </el-radio-group>\r\n </div>\r\n </div>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {get,postJson} from '../../axios'\r\n export default {\r\n data() {\r\n return {\r\n title: \"单选筛选器\",\r\n searchData: \"\",\r\n visible: this.show,\r\n addVisible: false,\r\n addForm: {}\r\n }\r\n },\r\n props: [\"show\",\"option\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show;\r\n if(this.visible){\r\n this.searchData = \"\";\r\n if(this.option.initPath !== undefined && this.option.initPath !== null && this.option.initPath !== \"\"){\r\n get(this.option.initPath,null,true,res=>{\r\n this.option.data = res.list;\r\n });\r\n }\r\n }\r\n },\r\n addVisible(){\r\n if(this.addVisible){\r\n this.addForm = {}\r\n }\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n addItem(){\r\n if(this.option.group){\r\n this.$message.error(\"分组暂不支持\");\r\n }else{\r\n let _this = this;\r\n postJson(this.option.insertPath,this.addForm,true,res=>{\r\n _this.option.data.push({\r\n value: _this.addForm[_this.option.realField||'value'],\r\n text: _this.addForm[_this.option.showField||'text']\r\n });\r\n this.addVisible = false;\r\n });\r\n }\r\n },\r\n submit(){\r\n if(this.option.group){\r\n let value = [];\r\n for(let i in this.option.data){\r\n let dataArr = this.option.data[i].data;\r\n let valueStr = this.option.value[i];\r\n for(let d in dataArr){\r\n if(dataArr[d][this.option.realField||'value'] === valueStr){\r\n value.push(dataArr[d]);\r\n }\r\n }\r\n }\r\n this.$emit('callback', value);\r\n }else{\r\n let value = {};\r\n for(let d in this.option.data){\r\n if(this.option.data[d][this.option.realField||'value'] === this.option.value){\r\n value = this.option.data[d];\r\n }\r\n }\r\n this.$emit('callback', value);\r\n }\r\n this.visible = false;\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.option.height||'600px';\r\n }\r\n },\r\n computed:{\r\n filterData() {\r\n if(this.option.group){\r\n let data = [];\r\n for(let i in this.option.data){\r\n let groupData = this.option.data[i].data;\r\n let groupName = this.option.data[i].name;\r\n let itemData = [];\r\n for(let d in groupData){\r\n let value = groupData[d][this.option.realField||'value'];\r\n let text = groupData[d][this.option.showField||'text'];\r\n if(text.indexOf(this.searchData) != -1){\r\n itemData.push({\r\n value: value,\r\n text: text\r\n });\r\n }\r\n }\r\n let item = {\r\n name: groupName,\r\n data: itemData\r\n };\r\n data.push(item);\r\n }\r\n return data;\r\n }else{\r\n let data = [];\r\n for(let i in this.option.data){\r\n let value = this.option.data[i][this.option.realField||'value'];\r\n let text = this.option.data[i][this.option.showField||'text'];\r\n if(text.indexOf(this.searchData) != -1){\r\n data.push({\r\n value: value,\r\n text: text \r\n });\r\n }\r\n }\r\n return data;\r\n }\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n.mftcc-radio-dialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-radio-dialog .el-dialog__body{\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-radio-dialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.mftcc-radio-dialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n","<template>\r\n <el-dialog\r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n class=\"mftcc-table-dialog\"\r\n :width=\"doption.width\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n append-to-body\r\n :fullscreen=\"doption.fullscreen\"\r\n :center=\"doption.center\"\r\n :close-on-click-modal=\"false\"\r\n :title=\"doption.title\"\r\n >\r\n <div class=\"dialog-content\">\r\n <div class=\"mftcc-dialog-content\">\r\n <mftcc-table\r\n v-if=\"tableShow\"\r\n :tableId=\"doption.tableId\"\r\n :parentVm=\"parentVm\"\r\n :initData=\"initData\"\r\n :initSearchData=\"initSearchData\"\r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n ref=\"dialogList\"\r\n >\r\n </mftcc-table>\r\n </div>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\" v-if=\"doption.footer\">\r\n <el-button type=\"primary\" @click=\"submit\">{{\r\n doption.confirmButtonText\r\n }}</el-button>\r\n <el-button @click=\"visible = false\">{{ doption.cancelButtonText }}</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nexport default {\r\n data() {\r\n return {\r\n initData: {},\r\n visible: this.show,\r\n initSearchData: \"\",\r\n tableShow: false,\r\n };\r\n },\r\n props: {\r\n show: {\r\n type: Boolean,\r\n default() {\r\n return false;\r\n },\r\n },\r\n parentVm: {\r\n type: Object,\r\n default() {\r\n return null;\r\n },\r\n },\r\n option: {\r\n type: Object,\r\n default() {\r\n return {};\r\n },\r\n },\r\n },\r\n computed: {\r\n doption() {\r\n return Object.assign(\r\n {\r\n width: \"1000px\",\r\n height: \"600px\",\r\n fullscreen: false,\r\n center: false,\r\n footer: true,\r\n title: \"列表\",\r\n confirmButtonText: \"确 定\",\r\n cancelButtonText: \"取 消\",\r\n },\r\n this.option\r\n );\r\n },\r\n },\r\n watch: {\r\n show() {\r\n let _this = this;\r\n _this.visible = _this.show;\r\n if (_this.visible === true) {\r\n if (_this.doption.type === \"radio\") {\r\n _this.$set(_this.initData, \"isSelect\", false);\r\n } else {\r\n _this.$set(_this.initData, \"isSelect\", true);\r\n }\r\n _this.$set(_this.initData, \"tableData\", _this.doption.data);\r\n if (_this.doption.columns && _this.doption.columns.length > 0) {\r\n _this.$set(_this.initData, \"columns\", _this.doption.columns);\r\n }\r\n if (_this.doption.initSearchData) {\r\n _this.$set(_this.initData, \"initSearchData\", _this.doption.initSearchData);\r\n }\r\n _this.$set(_this.initData, \"isPagination\", _this.doption.isPagination);\r\n _this.$set(_this.initData, \"url\", _this.doption.url);\r\n _this.initSearchData = _this.doption.initSearchData || {};\r\n\r\n _this.tableShow = true;\r\n _this.$nextTick(() => {\r\n _this.$refs.dialogList.initTable(function () {\r\n setTimeout(function () {\r\n for (let i in _this.doption.value) {\r\n if (\r\n _this.doption.type === \"radio\" &&\r\n _this.doption.value[i].key !== undefined\r\n ) {\r\n _this.$refs.dialogList.setCurrentValue(\r\n _this.doption.value[i].key,\r\n _this.doption.value[i].value\r\n );\r\n } else if (_this.doption.value[i].key !== undefined) {\r\n _this.$refs.dialogList.setSelectValue(\r\n _this.doption.value[i].key,\r\n _this.doption.value[i].value\r\n );\r\n }\r\n }\r\n }, 0);\r\n });\r\n });\r\n } else {\r\n _this.tableShow = false;\r\n }\r\n },\r\n },\r\n methods: {\r\n currentChange(currentRow, oldCurrentRow) {\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n submit() {\r\n let value = [];\r\n if (this.doption.type === \"radio\") {\r\n value = this.$refs.dialogList.getCurrentValue();\r\n } else {\r\n value = this.$refs.dialogList.getSelectValue();\r\n }\r\n this.$emit(\"callback\", value);\r\n this.visible = false;\r\n },\r\n opened() {\r\n this.$refs.dialog.$el.children[0].style.height = this.doption.height;\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-table-dialog .mftcc-form-search {\r\n padding: 0 20px;\r\n}\r\n.mftcc-table-dialog .search_form_div {\r\n display: flex;\r\n align-items: flex-start;\r\n}\r\n.mftcc-table-dialog .dialog-content {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n}\r\n\r\n.mftcc-table-dialog .mftcc-search-form .search-button button {\r\n float: right;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content {\r\n flex-grow: 1;\r\n display: flex;\r\n padding-top: 0px !important;\r\n}\r\n.mftcc-table-dialog .el-dialog {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-table-dialog .el-dialog__body {\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-table-dialog .search_form_div{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: start;\r\n -ms-flex-align: start;\r\n align-items: flex-start;\r\n}\r\n.mftcc-table-dialog .dialog-content{\r\n height: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n}\r\n.mftcc-table-dialog .mftcc-search-form .search-button button{\r\n float: right;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n}\r\n.mftcc-table-dialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.mftcc-table-dialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n :width=\"option.width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n class=\"treeDialog\">\r\n <div slot=\"title\" class=\"dialog-header\" style=\"display: flex;justify-content: flex-end;\">\r\n <label style=\"position: absolute;left: 20px;\">{{ option.title||title }}</label>\r\n <el-input \r\n autocomplete=\"off\"\r\n placeholder=\"请输入关键字\"\r\n suffix-icon=\"el-icon-search\"\r\n v-if=\"(option.search===undefined)?true:option.search\"\r\n v-model=\"searchData\"\r\n style=\"width: 150px;margin: 0px 30px 0px 0px;\"></el-input>\r\n <el-popover\r\n placement=\"bottom\"\r\n width=\"160\"\r\n v-model=\"addVisible\"\r\n v-if=\"(option.insert===undefined)?true:option.insert\">\r\n <el-form :model=\"addForm\" label-width=\"80px\" size=\"mini\">\r\n <el-form-item label=\"真实值\">\r\n <el-input v-model=\"addForm.id\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"显示值\">\r\n <el-input v-model=\"addForm[(option.defaultProps===undefined)?defaultProps.label:'label']\"></el-input>\r\n </el-form-item>\r\n </el-form>\r\n <div style=\"text-align: right; margin: 0\">\r\n <el-button size=\"mini\" type=\"text\" @click=\"addVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" size=\"mini\" @click=\"addItem\">确定</el-button>\r\n </div>\r\n <el-button \r\n type=\"primary\" \r\n slot=\"reference\"\r\n style=\"margin: 0px 30px 0px 0px;\">新增</el-button>\r\n </el-popover>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-tree\r\n :data=\"treeData\"\r\n node-key=\"id\"\r\n highlight-current\r\n check-strictly\r\n :default-checked-keys=\"option.value||[]\"\r\n :default-expanded-keys=\"expandedKeys\"\r\n :current-node-key=\"(option.value===undefined||option.value.length===0)?'':option.value[0]\"\r\n :show-checkbox=\"(option.type==='single')?false:true\"\r\n :props=\"option.defaultProps||defaultProps\"\r\n :filter-node-method=\"filterNode\"\r\n @check=\"handleCheck\"\r\n ref=\"tree\">\r\n </el-tree>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {get,postJson} from '../../axios'\r\n export default {\r\n data() {\r\n return {\r\n title: \"树形筛选器\",\r\n searchData: \"\",\r\n visible: this.show,\r\n defaultProps: {\r\n children: 'children',\r\n label: 'label'\r\n },\r\n expandedKeys: [],\r\n treeData: [],\r\n addVisible: false,\r\n addForm: {}\r\n }\r\n },\r\n props: [\"show\",\"option\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show;\r\n if(this.visible){\r\n this.searchData = \"\";\r\n if(this.option.initPath !== undefined && this.option.initPath !== null && this.option.initPath !== \"\"){\r\n get(this.option.initPath,null,true,res=>{\r\n this.treeData = res.list;\r\n });\r\n }else{\r\n this.treeData = this.option.data;\r\n }\r\n this.expandedKeys = this.option.value||[];\r\n }\r\n },\r\n addVisible(){\r\n if(this.addVisible){\r\n this.addForm = {}\r\n }\r\n },\r\n searchData(val){\r\n this.$refs.tree.filter(val);\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n addItem(){\r\n let node = this.$refs.tree.getCurrentNode();\r\n let pid = node.id;\r\n this.addForm.pid = pid;\r\n this.addForm.children = [];\r\n postJson(this.option.insertPath,this.addForm,true,res=>{\r\n this.$refs.tree.append(this.addForm, pid);\r\n this.expandedKeys = [this.addForm.id];\r\n this.addVisible = false;\r\n });\r\n },\r\n submit(){\r\n let value = [];\r\n if(this.option.type===\"single\"){\r\n let cn = this.$refs.tree.getCurrentNode();\r\n let node = this.$refs.tree.getNode(cn.id);\r\n let parentNodes = [];\r\n this.getParentNodes(node,parentNodes);\r\n value = value.concat(parentNodes);\r\n value.push(node.data);\r\n }else{\r\n let nodes = this.$refs.tree.getCheckedNodes();\r\n let parentNodes = [];\r\n let nodeArr = [];\r\n for(let i in nodes){\r\n let node = this.$refs.tree.getNode(nodes[i].id);\r\n if(i<nodes.length-1){\r\n let nextNode = this.$refs.tree.getNode(nodes[Number(i)+1].id);\r\n if(node.level<nextNode.level){\r\n parentNodes.push(nodes[i]);\r\n }else{\r\n nodeArr.push(nodes[i]);\r\n }\r\n }else{\r\n nodeArr.push(nodes[i]);\r\n }\r\n }\r\n for(let n in nodeArr){\r\n let arr = []\r\n arr = arr.concat(parentNodes);\r\n arr.push(nodeArr[n]);\r\n value.push(arr);\r\n }\r\n }\r\n this.$emit('callback', value);\r\n this.visible = false;\r\n },\r\n filterNode(value, data) {\r\n if (!value) return true;\r\n let dp = this.option.defaultProps||this.defaultProps;\r\n return data[dp.label].indexOf(value) !== -1;\r\n },\r\n getParentNodes(node, nodeArr){\r\n if(node.parent && node.parent.key){\r\n nodeArr.push(node.parent.data);\r\n this.getParentNodes(node.parent, nodeArr);\r\n }\r\n },\r\n handleCheck (currentObj, treeStatus) {\r\n // 用于:父子节点严格互不关联时,父节点勾选变化时通知子节点同步变化,实现单向关联。\r\n let selected = treeStatus.checkedKeys.indexOf(currentObj.id) // -1未选中\r\n // 选中\r\n if (selected !== -1) {\r\n // 子节点只要被选中父节点就被选中\r\n this.selectedParent(currentObj)\r\n // 统一处理子节点为相同的勾选状态\r\n this.uniteChildSame(currentObj, true)\r\n } else {\r\n // 未选中 处理子节点全部未选中\r\n let dp = this.option.defaultProps||this.defaultProps;\r\n if (currentObj[dp.children]&¤tObj[dp.children].length !== 0) {\r\n this.uniteChildSame(currentObj, false)\r\n }\r\n }\r\n },\r\n // 统一处理子节点为相同的勾选状态\r\n uniteChildSame (treeList, isSelected) {\r\n this.$refs.tree.setChecked(treeList.id, isSelected);\r\n let dp = this.option.defaultProps||this.defaultProps;\r\n if(treeList[dp.children]){\r\n for (let i = 0; i < treeList[dp.children].length; i++) {\r\n this.uniteChildSame(treeList[dp.children][i], isSelected)\r\n }\r\n }\r\n },\r\n // 统一处理父节点为选中\r\n selectedParent (currentObj) {\r\n let currentNode = this.$refs.tree.getNode(currentObj)\r\n if (currentNode.parent.key !== undefined) {\r\n this.$refs.tree.setChecked(currentNode.parent, true)\r\n this.selectedParent(currentNode.parent)\r\n }\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.option.height||'600px';\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n.treeDialog .el-tree{\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.treeDialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.treeDialog .el-dialog__body{\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.treeDialog .el-tree{\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.treeDialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.treeDialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n overflow: auto;\r\n}\r\n","<template>\r\n <el-container>\r\n <el-timeline class=\"appTimeLine\">\r\n <el-timeline-item\r\n v-for=\"(timeline, index) in timeLineData\"\r\n :key=\"index\"\r\n :color=\"timeline.dotcolor\"\r\n :size=\"timeline.dotsize\"\r\n placement=\"top\"\r\n :timestamp=\"getCreateTime(timeline)\"\r\n >\r\n <!-- 会签 -->\r\n <el-card\r\n class=\"timeLineItem\"\r\n body-style=\"padding:10px;\"\r\n v-if=\"timeline.isMultiSign === true\"\r\n >\r\n <span class=\"taskName\">{{ getTaskName(timeline) }}</span>\r\n <el-collapse>\r\n <el-collapse-item\r\n v-for=\"(item, index) in timeline.multiSignGroup\"\r\n :key=\"index\"\r\n >\r\n <template slot=\"title\">\r\n <div style=\"width: 100%\">\r\n <div v-if=\"timeline.isOpen\" class=\"openTask\">\r\n <span style=\"font-weight: bold\"\r\n ><span class=\"assignee-name\">{{ item.ASSIGNEE_NAME }} </span>\r\n <span\r\n v-if=\"timeline.TASK_TYPE != '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >审批中...</span\r\n >\r\n <span\r\n v-if=\"timeline.TASK_TYPE == '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >分配中...</span\r\n ></span\r\n >\r\n <span class=\"duration\">已送达:{{ item.DURATION }}</span>\r\n <el-button\r\n v-if=\"timeline.isOpen && isTest\"\r\n type=\"primary\"\r\n size=\"mini\"\r\n @click=\"doCommitTest(timeline)\"\r\n >审批</el-button\r\n >\r\n </div>\r\n <div class=\"app-footer\" v-if=\"!timeline.isOpen\">\r\n <span class=\"endTime\"\r\n ><i class=\"el-icon-time\"></i>{{ item.END_TIME }}</span\r\n >\r\n <span class=\"assignee\"\r\n >处理人:<span class=\"assignee-name\">{{\r\n item.ASSIGNEE_NAME\r\n }}</span></span\r\n >\r\n </div>\r\n </div>\r\n </template>\r\n <div class=\"app-header\" v-if=\"!timeline.isOpen\">\r\n <span class=\"approveType\">{{ item.APPROVE_TYPE }}</span>\r\n <span class=\"duration\">耗时:{{ item.DURATION }}</span>\r\n </div>\r\n <div class=\"app-content\" v-if=\"!timeline.isOpen\">\r\n <div class=\"approveIdea\">{{ resApproveIdea(item.APPROVE_IDEA) }}</div>\r\n </div>\r\n </el-collapse-item>\r\n </el-collapse>\r\n </el-card>\r\n <!-- 子流程 -->\r\n <el-card\r\n class=\"timeLineItem\"\r\n body-style=\"padding:10px;\"\r\n v-else-if=\"timeline.TASK_TYPE == '9'\"\r\n >\r\n <span class=\"taskName\">{{ getTaskName(timeline) }}</span>\r\n <div v-if=\"!timeline.END_TIME\" class=\"openTask\">\r\n <span style=\"font-weight: bold\"\r\n ><span class=\"assignee-name\">{{ timeline.ASSIGNEE_NAME }} </span>\r\n <span\r\n v-if=\"timeline.TASK_TYPE != '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >审批中...</span\r\n >\r\n <span\r\n v-if=\"timeline.TASK_TYPE == '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >分配中...</span\r\n ></span\r\n >\r\n <span class=\"duration\">已送达:{{ timeline.DURATION }}</span>\r\n </div>\r\n <el-button\r\n v-if=\"!timeline.END_TIME && isTest\"\r\n type=\"primary\"\r\n size=\"mini\"\r\n @click=\"doCommitTest(timeline)\"\r\n >审批</el-button\r\n >\r\n <div\r\n v-if=\"timeline.END_TIME\"\r\n style=\"\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n justify-content: flex-end;\r\n padding: 0 10px;\r\n \"\r\n >\r\n <div style=\"width: 100%; display: flex; justify-content: space-between\">\r\n <span :style=\"'color:' + dotcolor\"\r\n ><i class=\"el-icon-success\"></i> 已完成</span\r\n >\r\n <span class=\"duration\" style=\"color: #909399; font-size: 13px\"\r\n >耗时:{{ timeline.DURATION }}</span\r\n >\r\n </div>\r\n <el-button type=\"text\" @click=\"queryChildProcess(timeline)\"\r\n >查看详情</el-button\r\n >\r\n </div>\r\n </el-card>\r\n <el-card\r\n class=\"timeLineItem onlyName\"\r\n body-style=\"padding:10px;\"\r\n v-else-if=\"!timeline.PROC_INST_ID\"\r\n >\r\n <span class=\"taskName\">{{ getTaskName(timeline) }}</span>\r\n </el-card>\r\n <el-card class=\"timeLineItem\" body-style=\"padding:10px;\" v-else>\r\n <span class=\"taskName\">{{ getTaskName(timeline) }}</span>\r\n <div v-if=\"timeline.isOpen\" class=\"openTask\">\r\n <span style=\"font-weight: bold\"\r\n ><span class=\"assignee-name\">{{ timeline.ASSIGNEE_NAME }} </span>\r\n <span\r\n v-if=\"timeline.TASK_TYPE != '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >审批中...</span\r\n >\r\n <span\r\n v-if=\"timeline.TASK_TYPE == '分配任务'\"\r\n class=\"appIng\"\r\n :style=\"'color:' + dotcolor\"\r\n >分配中...</span\r\n ></span\r\n >\r\n <span class=\"duration\">已送达:{{ timeline.DURATION }}</span>\r\n </div>\r\n <el-button\r\n v-if=\"timeline.isOpen && isTest\"\r\n type=\"primary\"\r\n size=\"mini\"\r\n @click=\"doCommitTest(timeline)\"\r\n >审批</el-button\r\n >\r\n <div class=\"app-header\" v-if=\"!timeline.isOpen\">\r\n <span v-if=\"timeline.TASK_TYPE == 8\" class=\"approveType\">业务完成</span>\r\n <span v-else class=\"approveType\">{{ timeline.APPROVE_TYPE }}</span>\r\n <span class=\"duration\">耗时:{{ timeline.DURATION }}</span>\r\n </div>\r\n <div\r\n class=\"app-content\"\r\n v-if=\"!timeline.isOpen && resApproveIdea(timeline.APPROVE_IDEA) !== ''\"\r\n >\r\n <div class=\"approveIdea\">{{ resApproveIdea(timeline.APPROVE_IDEA) }}</div>\r\n </div>\r\n <div class=\"app-footer\" v-if=\"!timeline.isOpen\">\r\n <span class=\"endTime\"\r\n ><i class=\"el-icon-time\"></i>{{ timeline.END_TIME }}</span\r\n >\r\n <span\r\n v-if=\"timeline.TASK_TYPE != 8 && timeline.TASK_TYPE != 5\"\r\n class=\"assignee\"\r\n >处理人:<span class=\"assignee-name\">{{\r\n timeline.ASSIGNEE_NAME\r\n }}</span></span\r\n >\r\n </div>\r\n </el-card>\r\n </el-timeline-item>\r\n </el-timeline>\r\n <el-drawer\r\n title=\"审批历史\"\r\n :visible.sync=\"childProcessShow\"\r\n direction=\"rtl\"\r\n custom-class=\"timeLineDrawer\"\r\n :modal=\"false\"\r\n size=\"80%\"\r\n :with-header=\"false\"\r\n >\r\n <time-line\r\n :timeLineShow=\"childProcessShow\"\r\n :traceNo=\"childProcessTraceNo\"\r\n :bizMark=\"childProcessBizMark\"\r\n ></time-line>\r\n </el-drawer>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport api from \"../../api/flowable\";\r\nexport default {\r\n name: \"timeLine\",\r\n data() {\r\n return {\r\n childProcessShow: false,\r\n timeLineData: [],\r\n childProcessTraceNo: \"\",\r\n childProcessBizMark: \"\",\r\n dotcolor: \"#1EC5B5\",\r\n dotsize: \"large\",\r\n };\r\n },\r\n props: [\"timeLineShow\", \"traceNo\", \"bizMark\", \"taskDefId\", \"isShowSign\", \"isTest\"],\r\n watch: {\r\n timeLineShow(value) {\r\n if (value) {\r\n this.init();\r\n } else {\r\n this.childProcessShow = false;\r\n }\r\n },\r\n },\r\n created() {\r\n this.init();\r\n },\r\n methods: {\r\n init() {\r\n //业务唯一标识为空时,不展示审批历史\r\n if (this.traceNo == \"\" || this.traceNo == null) {\r\n return;\r\n }\r\n let param = {\r\n traceNo: this.traceNo,\r\n bizMark: this.bizMark,\r\n taskDefId: this.taskDefId,\r\n isShowSign: this.isShowSign,\r\n opNo: this.$store.getters.user.opNo,\r\n };\r\n api.getTimeLine(param, (res) => {\r\n if (res.code == 0) {\r\n this.timeLineData = res.data.hisTask;\r\n if (res.data.task && res.data.task.length > 0) {\r\n for (let i in res.data.task) {\r\n res.data.task[i].isOpen = true;\r\n res.data.task[i].dotcolor = this.dotcolor;\r\n res.data.task[i].dotsize = this.dotsize;\r\n }\r\n this.timeLineData = this.timeLineData.concat(res.data.task);\r\n }\r\n if (res.data.assign && res.data.assign.length > 0) {\r\n for (let i in res.data.assign) {\r\n res.data.assign[i].isOpen = true;\r\n res.data.assign[i].dotcolor = this.dotcolor;\r\n res.data.assign[i].dotsize = this.dotsize;\r\n }\r\n this.timeLineData = this.timeLineData.concat(res.data.assign);\r\n }\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n },\r\n queryChildProcess(timeline) {\r\n if (timeline.TASK_TYPE == \"9\" && timeline.childProc) {\r\n this.childProcessTraceNo = timeline.childProc[0].TRACE_NO;\r\n this.childProcessBizMark = timeline.childProc[0].BIZ_ID;\r\n this.childProcessShow = true;\r\n }\r\n },\r\n resApproveIdea(value) {\r\n if (!value) {\r\n return \"\";\r\n }\r\n // let data = JSON.parse(value);\r\n // if(data.newApprove){\r\n // return data.newApprove[0].name;\r\n // }else{\r\n // return data;\r\n // }\r\n return value;\r\n },\r\n getCreateTime(timeline) {\r\n if (timeline.isMultiSign) {\r\n return timeline.multiSignGroup[0].CREATE_TIME;\r\n } else {\r\n return timeline.CREATE_TIME;\r\n }\r\n },\r\n getTaskName(timeline) {\r\n if (timeline.isMultiSign) {\r\n return timeline.multiSignGroup[0].TASK_NAME;\r\n } else {\r\n if (timeline.TASK_NAME == \"launchNode\") {\r\n return \"开始\";\r\n }\r\n return timeline.TASK_NAME;\r\n }\r\n },\r\n doCommitTest(timeline) {\r\n this.$emit(\"doCommitTest\", timeline);\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.appTimeLine {\r\n overflow: auto;\r\n padding: 20px;\r\n width: 100%;\r\n}\r\n.appTimeLine .el-timeline-item__timestamp {\r\n padding-top: 20px;\r\n}\r\n.timeLineItem.onlyName {\r\n box-shadow: none;\r\n border: none;\r\n}\r\n.timeLineItem.onlyName .el-card__body {\r\n padding: 0px !important;\r\n}\r\n.timeLineItem .taskName {\r\n font-weight: bold;\r\n position: absolute;\r\n top: -3px;\r\n left: 28px;\r\n font-size: 15px;\r\n color: #909399;\r\n}\r\n.timeLineItem .el-collapse,\r\n.timeLineItem .el-collapse-item__header,\r\n.timeLineItem .el-collapse-item__wrap {\r\n border: none;\r\n}\r\n\r\n.timeLineItem .app-header .duration,\r\n.openTask .duration {\r\n color: #909399;\r\n font-size: 13px;\r\n float: right;\r\n}\r\n.timeLineItem .app-header .approveType {\r\n color: #1ec5b5;\r\n}\r\n.timeLineItem .app-footer .endTime {\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n.timeLineItem .app-footer .endTime i {\r\n margin-right: 5px;\r\n}\r\n.timeLineItem .app-footer .assignee {\r\n color: #909399;\r\n font-size: 13px;\r\n float: right;\r\n}\r\n.timeLineItem .app-footer .assignee-name {\r\n font-size: 15px;\r\n color: #000;\r\n font-weight: bold;\r\n float: right;\r\n margin: 0 0 0 6px;\r\n border-bottom: solid 1px #eee;\r\n min-width: 90px;\r\n text-align: center;\r\n height: 25px;\r\n line-height: 25px;\r\n}\r\n.timeLineItem .app-content,\r\n.timeLineItem .app-header,\r\n.timeLineItem .app-footer {\r\n line-height: 30px;\r\n padding: 0 10px;\r\n margin-bottom: 10px;\r\n}\r\n.timeLineItem .app-content .approveIdea {\r\n min-height: 60px;\r\n background: linear-gradient(to bottom, transparent 29px, #eee 1px);\r\n background-size: 100% 30px;\r\n color: #ff9800;\r\n}\r\n.timeLineDrawer .el-drawer__wrapper {\r\n position: absolute;\r\n margin-bottom: 0px;\r\n}\r\n.openTask {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 10px;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.appTimeLine {\r\n overflow: auto;\r\n padding: 20px;\r\n width: 100%;\r\n}\r\n.appTimeLine .el-timeline-item__timestamp {\r\n padding-top: 20px;\r\n}\r\n.timeLineItem.onlyName {\r\n -webkit-box-shadow: none;\r\n box-shadow: none;\r\n border: none;\r\n}\r\n.timeLineItem.onlyName .el-card__body {\r\n padding: 0px !important;\r\n}\r\n.timeLineItem .taskName {\r\n font-weight: bold;\r\n position: absolute;\r\n top: -3px;\r\n left: 28px;\r\n font-size: 15px;\r\n color: #909399;\r\n}\r\n.timeLineItem .el-collapse,\r\n.timeLineItem .el-collapse-item__header,\r\n.timeLineItem .el-collapse-item__wrap {\r\n border: none;\r\n}\r\n.timeLineItem .app-header .duration,\r\n.openTask .duration {\r\n color: #909399;\r\n font-size: 13px;\r\n float: right;\r\n}\r\n.timeLineItem .app-header .approveType {\r\n color: #1ec5b5;\r\n}\r\n.timeLineItem .app-footer .endTime {\r\n color: #909399;\r\n font-size: 13px;\r\n}\r\n.timeLineItem .app-footer .endTime i {\r\n margin-right: 5px;\r\n}\r\n.timeLineItem .app-footer .assignee {\r\n color: #909399;\r\n font-size: 13px;\r\n float: right;\r\n}\r\n.timeLineItem .app-footer .assignee-name {\r\n font-size: 15px;\r\n color: #000;\r\n font-weight: bold;\r\n float: right;\r\n margin: 0 0 0 6px;\r\n border-bottom: solid 1px #eee;\r\n min-width: 90px;\r\n text-align: center;\r\n height: 25px;\r\n line-height: 25px;\r\n}\r\n.timeLineItem .app-content,\r\n.timeLineItem .app-header,\r\n.timeLineItem .app-footer {\r\n line-height: 30px;\r\n padding: 0 10px;\r\n margin-bottom: 10px;\r\n}\r\n.timeLineItem .app-content .approveIdea {\r\n min-height: 60px;\r\n background: linear-gradient(to bottom, transparent 29px, #eee 1px);\r\n background-size: 100% 30px;\r\n color: #ff9800;\r\n}\r\n.timeLineDrawer .el-drawer__wrapper {\r\n position: absolute;\r\n margin-bottom: 0px;\r\n}\r\n.openTask {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n padding: 12px 10px;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :close-on-click-modal=\"false\"\r\n :show=\"show\"\r\n class=\"wkf-user-Dialog\">\r\n <div slot=\"title\" class=\"dialog-header\">\r\n <label>选择人员</label>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-select \r\n v-model=\"userCheck\" \r\n :multiple=\"(type==='single')?false:true\"\r\n placeholder=\"点击下方选择\"\r\n clearable\r\n @visible-change=\"userChange\"\r\n ref=\"userSelect\"\r\n @change=\"userCheckedChange\">\r\n <el-option\r\n v-for=\"user in allUserArray\"\r\n :key=\"user.id\"\r\n :label=\"user.title\"\r\n :value=\"user.id\">\r\n </el-option>\r\n </el-select>\r\n <el-row>\r\n <el-col :span=\"16\" class=\"br-tree\">\r\n <div class=\"content\">\r\n <el-tree\r\n :data=\"treeData\"\r\n node-key=\"id\"\r\n highlight-current\r\n check-strictly\r\n :default-expanded-keys=\"expandedKeys\"\r\n :show-checkbox=\"false\"\r\n :props=\"defaultProps\"\r\n :filter-node-method=\"filterNode\"\r\n :expand-on-click-node=\"false\"\r\n @current-change=\"handleCheck\"\r\n ref=\"tree\"\r\n style=\"padding: 20px 0px 0 20px;\">\r\n </el-tree>\r\n </div>\r\n </el-col>\r\n <el-col :span=\"8\">\r\n <div class=\"user-group\">\r\n <template v-if=\"type==='single'\">\r\n <el-radio-group v-model=\"userCheck\">\r\n <el-radio \r\n v-for=\"user in userArray\"\r\n :key=\"user.id\"\r\n :label=\"user.id\">{{user.title}}\r\n </el-radio>\r\n </el-radio-group>\r\n </template>\r\n <template v-else>\r\n <el-checkbox \r\n :indeterminate=\"isIndeterminate\" \r\n v-model=\"checkAll\" \r\n @change=\"userCheckAllChange\"\r\n >全选</el-checkbox>\r\n <el-checkbox-group \r\n @change=\"userCheckedChange\"\r\n v-model=\"userCheck\">\r\n <el-checkbox \r\n v-for=\"user in userArray\"\r\n :key=\"user.id\"\r\n :label=\"user.id\">\r\n {{user.title}}\r\n </el-checkbox>\r\n </el-checkbox-group>\r\n </template>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n \r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {get, postJson} from '../../axios'\r\n export default {\r\n data() {\r\n return {\r\n title: \"选择人员\",\r\n visible: this.show,\r\n defaultProps: {\r\n children: 'children',\r\n label: 'title'\r\n },\r\n expandedKeys: [],\r\n treeData: [],\r\n userArray: [],\r\n userCheck: [],\r\n allUserArray: [],\r\n checkAll: false,\r\n isIndeterminate: false\r\n }\r\n },\r\n props: [\"show\",\"initData\",\"type\",\"searchData\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show\r\n if(this.visible === true){\r\n this.getTreeData()\r\n }\r\n }\r\n },\r\n created(){\r\n this.getTreeData()\r\n },\r\n methods: {\r\n userCheckAllChange(val) {\r\n for(let user of this.userArray){\r\n let index = this.userCheck.indexOf(user.id)\r\n if(index === -1 && val){\r\n this.userCheck.push(user.id);\r\n }else if(index != -1 && !val){\r\n this.userCheck.splice(index, 1); \r\n }\r\n }\r\n this.isIndeterminate = false;\r\n },\r\n userCheckedChange() {\r\n let checkedCount = 0 \r\n for(let user of this.userArray){\r\n if(this.userCheck.indexOf(user.id) != -1){\r\n checkedCount += 1\r\n }\r\n }\r\n this.checkAll = checkedCount > 0 && checkedCount === this.userArray.length;\r\n this.isIndeterminate = checkedCount > 0 && checkedCount < this.userArray.length;\r\n },\r\n userChange(value){\r\n if(value === true){\r\n this.$refs.userSelect.blur()\r\n }\r\n },\r\n getUsers(data,users){\r\n if(!(users instanceof Array)){\r\n users = []\r\n }\r\n for(let treeNode of data){\r\n if(treeNode.user instanceof Array){\r\n users = users.concat(treeNode.user)\r\n }\r\n if(treeNode.children instanceof Array){\r\n users = this.getUsers(treeNode.children,users)\r\n }\r\n }\r\n return users\r\n },\r\n getTreeData(){\r\n this.userArray = []\r\n this.treeData = []\r\n this.checkAll = false\r\n this.isIndeterminate = false\r\n let data = this.searchData || {}\r\n postJson(\"/mftcc-flowable-server/br/listForTreeAll\",data,true,res => {\r\n this.treeData = res.data\r\n this.allUserArray = this.unique(this.getUsers(res.data))\r\n if(this.type === 'single'){\r\n if(typeof(this.initData)=='string'){\r\n this.userCheck = this.initData\r\n }else{\r\n this.userCheck = ''\r\n }\r\n }else if(this.initData instanceof Array){\r\n this.userCheck = JSON.parse(JSON.stringify(this.initData))\r\n }else{\r\n this.userCheck = []\r\n }\r\n },error => {\r\n this.userCheck = []\r\n })\r\n },\r\n submit(){\r\n let result = []\r\n for(let user of this.allUserArray){\r\n if(this.type === 'single'){\r\n if(user.id === this.userCheck){\r\n result.push(user)\r\n }\r\n }else{\r\n for(let userCheck of this.userCheck){\r\n if(user.id === userCheck){\r\n result.push(user)\r\n }\r\n }\r\n }\r\n }\r\n this.$emit('callback', result);\r\n this.visible = false;\r\n },\r\n filterNode(value, data) {\r\n if (!value) return true;\r\n return data[dp.label].indexOf(value) !== -1;\r\n },\r\n unique(arr1) {\r\n const res = new Map();\r\n return arr1.filter((a) => !res.has(a.id) && res.set(a.id, 1))\r\n },\r\n handleCheck (currentObj, treeStatus) {\r\n if(currentObj.user instanceof Array){\r\n this.userArray = this.unique(currentObj.user)\r\n }else{\r\n this.userArray = []\r\n }\r\n this.userCheckedChange()\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n.wkf-user-Dialog .el-tree{\r\n height: 300px;\r\n overflow: auto;\r\n}\r\n.wkf-user-Dialog .el-dialog{\r\n width: 500px;\r\n}\r\n.wkf-user-Dialog .dialog-header{\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n.wkf-user-Dialog .dialog-header label{\r\n position: absolute;left: 20px;\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row{\r\n border: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .br-tree{\r\n border-right: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .user-group{\r\n width: 100px;padding: 20px 0px 0 20px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.wkf-user-Dialog .el-tree{\r\n height: 300px;\r\n overflow: auto;\r\n}\r\n.wkf-user-Dialog .el-dialog{\r\n width: 500px;\r\n}\r\n.wkf-user-Dialog .dialog-header{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: end;\r\n -ms-flex-pack: end;\r\n justify-content: flex-end;\r\n}\r\n.wkf-user-Dialog .dialog-header label{\r\n position: absolute;left: 20px;\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row{\r\n border: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .br-tree{\r\n border-right: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .user-group{\r\n width: 100px;padding: 20px 0px 0 20px;\r\n}\r\n","<template>\r\n <div id=\"iframeBox\" ref=\"iframeBox\">\r\n <iframe ref=\"iframe\" name=\"refresh_name\" class=\"iframe-style\" frameborder=\"no\" border=\"0\" />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { getToken, setToken } from \"../utils/storeUtil\";\r\nexport default {\r\n name: \"mftccIframe\",\r\n data() {\r\n return {\r\n loading: null,\r\n isLoaded:false,\r\n callback:null\r\n };\r\n },\r\n props: [\"src\",\"initParams\"],\r\n created() {},\r\n mounted() {\r\n this.resetSrc();\r\n this.message();\r\n },\r\n methods: {\r\n resetSrc() {\r\n let iframeUrl;\r\n if(this.src){\r\n iframeUrl = this.src;\r\n }else{\r\n let path = this.$route.path;\r\n iframeUrl = this.$route.meta.iframeUrl;\r\n if(iframeUrl.startsWith(\"/\")){\r\n iframeUrl = iframeUrl.substring(1);\r\n }\r\n var productName =iframeUrl.split(\"/\")[0];\r\n var productType = productName.substring(productName.indexOf(\"-\")+1,productName.lastIndexOf(\"-\"));\r\n let env = process.env.NODE_ENV == 'development'?\"DEV_\":\"PRO_\";\r\n let realPath = window.serverConfig[env+productType.toUpperCase()+\"_HOST\"]||\"\";\r\n if(!realPath){\r\n realPath = this.$store.getters.serverConfig[env+productType.toUpperCase()+\"_HOST\"]||\"\";\r\n }\r\n iframeUrl = realPath + \"/\" + iframeUrl;\r\n }\r\n if(iframeUrl){\r\n this.iframeInit(iframeUrl);\r\n }\r\n },\r\n sendToken(newVal) {\r\n const iframe = this.$refs.iframe;\r\n //发送消息\r\n let data = JSON.stringify({\r\n token:getToken(),\r\n initParams:this.initParams\r\n });\r\n iframe.contentWindow.postMessage(data, \"*\");\r\n // if(!this.isLoaded){\r\n // this.forceUpdataIframe(iframe, newVal)\r\n // this.isLoaded = true;\r\n\r\n // }\r\n //关闭加载\r\n this.loading.close();\r\n },\r\n //iframe 初始化\r\n iframeInit(newVal) {\r\n //链接为空不显示加载状态和绑定ifram监听事件\r\n if (newVal == \"\") {\r\n return;\r\n }\r\n // debugger;\r\n if (this.loading) {\r\n this.loading.close();\r\n }\r\n this.loading = this.$loading({\r\n target: this.$refs.iframeBox.$el,\r\n lock: true,\r\n customClass: \"global-loading\",\r\n text: \"页面加载中...\",\r\n spinner: \"el-icon-loading\",\r\n background: \"transparent\"\r\n });\r\n let iframe = this.$refs.iframe;\r\n\r\n // 处理兼容行问题\r\n if (iframe.attachEvent) {\r\n iframe.attachEvent(\"onload\", () => {\r\n this.sendToken(newVal);\r\n });\r\n } else {\r\n iframe.onload = () => {\r\n console.log(\"isOnLoad\");\r\n this.sendToken(newVal);\r\n };\r\n }\r\n\r\n\r\n //利用异步延迟加载和链接随机传参来达到刷新iframe缓存的目的,不加此步骤iframe页面不更新\r\n this.forceUpdataIframe(iframe, newVal);\r\n\r\n // debugger;\r\n },\r\n //强制刷新iframe缓存\r\n forceUpdataIframe(iframe, newVal) {\r\n setTimeout(() => {\r\n let fresh_link = new Date().getTime() + Math.floor(Math.random() * 1000000); //获取当前时间戳\r\n String.prototype.splice = function(start, newStr) {\r\n return this.slice(0, start) + newStr + this.slice(start);\r\n };\r\n let strIndex = newVal.indexOf(\"/#/\");\r\n let url;\r\n if(strIndex!=-1){\r\n url = newVal.splice(strIndex, \"?time=\" + fresh_link);\r\n }else{\r\n url = newVal + \"?time=\" + fresh_link;\r\n }\r\n let query = this.$route.query;\r\n for(let key in query){\r\n url += \"&\"+key+\"=\"+query[key];\r\n }\r\n console.log(\"url\", url);\r\n iframe.src = url;\r\n }, 100);\r\n },\r\n message(){\r\n window.removeEventListener('message',iframeHandler);\r\n window.addEventListener('message', iframeHandler);\r\n let _this = this;\r\n function iframeHandler(e) {\r\n if(typeof(_this.callback) === \"function\"){\r\n if(e.data.type == \"setVariables\"\r\n ||e.data.type == \"doCommitBack\"\r\n ||e.data.type == \"appFormInitMethod\"\r\n ||e.data.type == \"appPageDataMethod\"){\r\n _this.callback(e.data.data);\r\n _this.callback = null;\r\n }\r\n }\r\n }\r\n },\r\n //流程获取变量函数\r\n getVariables(variablesMethod,formData,callback){\r\n this.callback = callback;\r\n let data = {\r\n type: \"getVariables\",\r\n formData:formData,\r\n method: variablesMethod\r\n };\r\n this.$refs.iframe.contentWindow.postMessage(data, \"*\");\r\n },\r\n doCommit(method,params,callback){\r\n this.callback = callback;\r\n let data = {\r\n type: \"doCommit\",\r\n params: params,\r\n method: method\r\n };\r\n this.$refs.iframe.contentWindow.postMessage(data, \"*\");\r\n },\r\n appFormInitMethod(method,callback){\r\n this.callback = callback;\r\n let data = {\r\n type: \"appFormInitMethod\",\r\n method: method\r\n };\r\n this.$refs.iframe.contentWindow.postMessage(data, \"*\");\r\n },\r\n appPageDataMethod(method,callback){\r\n this.callback = callback;\r\n let data = {\r\n type: \"appPageDataMethod\",\r\n method: method\r\n };\r\n this.$refs.iframe.contentWindow.postMessage(data, \"*\");\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n#iframeBox{\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.iframe-style{\r\n width: 100%;\r\n height: calc(100% - 3px);\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n#iframeBox{\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.iframe-style{\r\n width: 100%;\r\n height: calc(100% - 3px);\r\n}\r\n","<template>\r\n <el-container class=\"appDetails\">\r\n <el-dialog\r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n v-dialogDrag\r\n ref=\"appDetails\"\r\n :close-on-click-modal=\"false\"\r\n custom-class=\"appDialog\"\r\n >\r\n <div slot=\"title\" class=\"dialog-header\" style=\"display: flex\">\r\n <label>审批详情</label>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-alert\r\n v-show=\"messageShow\"\r\n title=\"审批建议\"\r\n type=\"warning\"\r\n :description=\"approveGuide\"\r\n close-text=\"知道了\"\r\n @close=\"closeMessage\"\r\n v-if=\"query !== true\"\r\n style=\"position: absolute; top: 0; border-radius: 0\"\r\n show-icon\r\n >\r\n </el-alert>\r\n <div :class=\"appClassName\" style=\"height: 100%; overflow: auto\">\r\n <component :is=\"page\" v-bind=\"methodParam\" ref=\"component\"> </component>\r\n </div>\r\n <!-- <mftcc-iframe\r\n ref=\"component\"\r\n v-if=\"page !== null\"\r\n :src=\"page\"\r\n :initParams=\"methodParam\"\r\n ></mftcc-iframe> -->\r\n <el-drawer\r\n title=\"审批意见\"\r\n :visible.sync=\"approveShow\"\r\n direction=\"btt\"\r\n :custom-class=\"'approveDrawer ' + (appPage ? 'appPage' : '')\"\r\n :modal=\"false\"\r\n :with-header=\"false\"\r\n >\r\n <el-row v-if=\"appFormId != '' && appFormShow\" class=\"appFormRow\">\r\n <mftcc-form\r\n :formId=\"appFormId\"\r\n :parentVm=\"this\"\r\n ref=\"appBizForm\"\r\n ></mftcc-form>\r\n </el-row>\r\n <el-row v-if=\"appPage && appFormShow\" class=\"appFormRow\">\r\n <div :class=\"appPageClassName\">\r\n <component\r\n :is=\"page4app\"\r\n v-bind=\"appPageMethodParam\"\r\n ref=\"componentAppPage\"\r\n >\r\n </component>\r\n </div>\r\n <!-- <mftcc-iframe\r\n ref=\"componentAppPage\"\r\n v-if=\"page4app !== null\"\r\n :src=\"page4app\"\r\n :initParams=\"appPageMethodParam\"\r\n ></mftcc-iframe> -->\r\n </el-row>\r\n <el-form\r\n ref=\"appForm\"\r\n :model=\"appForm\"\r\n label-width=\"80px\"\r\n :rules=\"appFormRules\"\r\n class=\"appFormRow2\"\r\n >\r\n <el-row>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"意见类型\" prop=\"type\">\r\n <el-select\r\n v-model=\"appForm.type\"\r\n placeholder=\"请选择\"\r\n @change=\"selectType\"\r\n >\r\n <el-option\r\n v-for=\"approveBtn in approveBtnList\"\r\n :key=\"approveBtn.id\"\r\n :label=\"approveBtn.approveIdea\"\r\n :value=\"approveBtn.id\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"节点选择\" prop=\"type\" v-show=\"nodeShow\">\r\n <el-select v-model=\"node\" placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"node in nodeList\"\r\n :key=\"node.id\"\r\n :label=\"node.name\"\r\n :value=\"node.id\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"配置\" prop=\"type\" v-show=\"listBtnShow\">\r\n <el-button type=\"primary\" @click=\"showNodeList\">配置</el-button>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"审批说明\" prop=\"approve\" v-if=\"textShow\">\r\n <el-input\r\n resize=\"none\"\r\n rows=\"3\"\r\n maxlength=\"500\"\r\n :autosize=\"{ minRows: 3, maxRows: 6 }\"\r\n show-word-limit\r\n type=\"textarea\"\r\n v-model=\"appForm.approve\"\r\n ></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </el-drawer>\r\n <el-drawer\r\n title=\"审批历史\"\r\n :visible.sync=\"timeLineShow\"\r\n direction=\"rtl\"\r\n custom-class=\"timeLineDrawer\"\r\n :modal=\"false\"\r\n size=\"45%\"\r\n :with-header=\"false\"\r\n >\r\n <time-line\r\n :timeLineShow=\"timeLineShow\"\r\n :traceNo=\"traceNo\"\r\n :bizMark=\"bizMark\"\r\n :taskDefId=\"taskDefId\"\r\n ></time-line>\r\n </el-drawer>\r\n <el-dialog\r\n title=\"加签列表\"\r\n :visible.sync=\"listShow\"\r\n custom-class=\"addNodelog\"\r\n :close-on-click-modal=\"false\"\r\n :close-on-press-escape=\"false\"\r\n :modal=\"false\"\r\n >\r\n <div>\r\n <el-button type=\"primary\" @click=\"handleAdd\">新增</el-button>\r\n </div>\r\n <mftcc-edit-table\r\n tableId=\"flowable/addNodeList\"\r\n :parentVm=\"this\"\r\n ref=\"nodeList\"\r\n ></mftcc-edit-table>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"listShow = false\">取 消</el-button>\r\n <el-button type=\"primary\" @click=\"saveNode\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer approve-footer\">\r\n <div style=\"text-align: center\">\r\n <el-button type=\"primary\" @click=\"approve\" v-if=\"query !== true\">{{\r\n approveBtnText\r\n }}</el-button>\r\n <el-button type=\"primary\" @click=\"openTimeLine\">审批历史</el-button>\r\n <el-button @click=\"cancel\">取 消</el-button>\r\n </div>\r\n </div>\r\n </el-dialog>\r\n <mftcc-dialog-table\r\n @callback=\"userDialogCallback\"\r\n :show.sync=\"userDialog\"\r\n :parentVm=\"this\"\r\n :option=\"userOption\"\r\n ></mftcc-dialog-table>\r\n <mftcc-plt-user-table\r\n @callback=\"userDialogCallback\"\r\n :show.sync=\"userAllDialog\"\r\n :parentVm=\"this\"\r\n :option=\"userAllOption\"\r\n ></mftcc-plt-user-table>\r\n <mftcc-dialog-radio\r\n :show.sync=\"nodeIdRadio\"\r\n :option=\"nodeIdOption\"\r\n @callback=\"nodeIdCallback\"\r\n >\r\n </mftcc-dialog-radio>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport timeLine from \"../flowable/timeLine\";\r\nimport api from \"../../api/flowable\";\r\nimport wkfUserDialog from \"../flowable/wkfUserDialog\";\r\nimport mftccIframe from \"../mftccIframe\";\r\n\r\nexport default {\r\n name: \"appDetail\",\r\n data() {\r\n return {\r\n page: null,\r\n page4app: null,\r\n timeLineShow: false,\r\n nodeShow: false,\r\n listShow: false,\r\n listBtnShow: false,\r\n textShow: true,\r\n approveShow: false,\r\n appFormShow: false,\r\n visible: this.show,\r\n approveBtnText: \"审 批\",\r\n appForm: {\r\n type: \"\",\r\n approve: \"\",\r\n },\r\n appFormRules: {\r\n type: [{ required: true, message: \"请选择审批类型\", trigger: \"change\" }],\r\n },\r\n messageShow: false,\r\n traceNo: \"\",\r\n procId: \"\",\r\n bizMark: \"\",\r\n approveGuide: \"\",\r\n approveBtnList: [],\r\n nodeList: [],\r\n userDialog: false,\r\n userAllDialog: false,\r\n userOption: {},\r\n userAllOption: {},\r\n nodeIdRadio: false,\r\n nodeIdOption: {},\r\n\r\n taskId: \"\",\r\n taskDefId: \"\",\r\n node: {\r\n id: \"\",\r\n seqList: \"\",\r\n },\r\n method: \"\",\r\n methodParam: {},\r\n appPageMethodParam: {},\r\n variablesMethod: \"\",\r\n variables: {},\r\n backNodeHasSearch: false,\r\n submitNodeHasSearch: false,\r\n backNodeList: [],\r\n submitNodeList: [],\r\n addNodeList: [],\r\n initData: [],\r\n clickIndex: \"\",\r\n finishType: 0,\r\n appFormId: \"\",\r\n appPage: null,\r\n appFormInitMethod: \"\",\r\n appPageDataMethod: \"\",\r\n appBizFormData: null,\r\n appClassName: \"\",\r\n appPageClassName: \"\",\r\n };\r\n },\r\n props: [\"show\", \"appData\", \"query\"],\r\n watch: {\r\n approveShow(val) {\r\n if (val === true) {\r\n this.approveBtnText = \"提 交\";\r\n this.$nextTick(() => {\r\n this.appFormShow = true;\r\n });\r\n } else {\r\n this.approveBtnText = \"审 批\";\r\n this.appFormShow = false;\r\n }\r\n },\r\n appData: {\r\n handler(row) {\r\n this.procId = row.PROC_INST_ID;\r\n if (!this.procId) {\r\n return;\r\n }\r\n this.bizMark = row.BIZ_ID;\r\n this.taskId = row.TASK_ID;\r\n this.taskDefId = row.TASK_DEF_ID;\r\n this.traceNo = row.TRACE_NO;\r\n this.finishType = row.finishType;\r\n this.getApprovalDetail(this.taskId, this.finishType);\r\n },\r\n immediate: true,\r\n },\r\n show() {\r\n this.visible = this.show;\r\n this.timeLineShow = false;\r\n this.nodeShow = false;\r\n this.textShow = true;\r\n this.listShow = false;\r\n this.listBtnShow = false;\r\n this.approveShow = false;\r\n this.page = null;\r\n this.page4app = null;\r\n if (this.show) {\r\n this.appForm = {\r\n type: \"\",\r\n approve: \"\",\r\n };\r\n this.$nextTick(() => {\r\n if (this.$refs.appForm) {\r\n this.$refs.appForm.clearValidate();\r\n }\r\n });\r\n let dragDom = this.$refs.appDetails.$el.firstChild;\r\n dragDom.style.top = 0;\r\n dragDom.style.left = 0;\r\n let DomClass = dragDom.className;\r\n DomClass = DomClass.replace(\"fullDialog\", \"\");\r\n dragDom.className = DomClass;\r\n this.getApprovalDetail(this.taskId, this.finishType);\r\n }\r\n },\r\n \"appForm.type\"(val) {\r\n let flag = false;\r\n for (let approveBtn of this.approveBtnList) {\r\n if (approveBtn.id == val && approveBtn.approveType == \"1\") {\r\n flag = true;\r\n break;\r\n }\r\n }\r\n if (!flag) {\r\n this.appFormRules.approve = [\r\n { required: true, message: \"请填写审批说明\", trigger: \"blur\" },\r\n ];\r\n } else {\r\n delete this.appFormRules.approve;\r\n }\r\n this.textShow = false;\r\n this.$nextTick(() => {\r\n this.textShow = true;\r\n });\r\n },\r\n },\r\n components: {\r\n timeLine,\r\n wkfUserDialog,\r\n mftccIframe,\r\n },\r\n methods: {\r\n handleAdd() {\r\n this.$refs.nodeList.addData();\r\n },\r\n userDialogGetAllCallback(value) {\r\n let fieldValue = \"\";\r\n for (let user of value) {\r\n fieldValue = user.id + \"|\" + fieldValue;\r\n }\r\n this.$refs.nodeList.setFormValue(this.clickIndex, \"assigneeId\", fieldValue);\r\n },\r\n saveNode() {\r\n this.listShow = false;\r\n this.addNodeList = this.$refs.nodeList.getFormValue().allData;\r\n },\r\n showNodeList() {\r\n if (this.listShow) {\r\n this.listShow = false;\r\n } else {\r\n this.listShow = true;\r\n }\r\n },\r\n goback() {\r\n this.listShow = false;\r\n },\r\n edit(index, row) {\r\n this.$refs.nodeList.editTable(index, true);\r\n },\r\n delete(index, row) {\r\n this.$refs.nodeList.editTable(index, false);\r\n },\r\n selectType() {\r\n let approveBtnSub = \"\";\r\n for (let approveBtn of this.approveBtnList) {\r\n if (approveBtn.id === this.appForm.type) {\r\n approveBtnSub = approveBtn;\r\n }\r\n }\r\n if (approveBtnSub.approveType == 5) {\r\n this.nodeShow = true;\r\n this.textShow = true;\r\n this.listBtnShow = false;\r\n this.listShow = false;\r\n this.node = \"\";\r\n if (this.backNodeHasSearch) {\r\n this.nodeList = this.backNodeList;\r\n } else {\r\n let data = {\r\n taskId: this.taskId,\r\n };\r\n api.getFinishNodeList(data, (res) => {\r\n if (res.code == 0) {\r\n this.nodeList = res.data.NodeList;\r\n this.backNodeList = res.data.NodeList;\r\n this.backNodeHasSearch = true;\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n }\r\n } else if (approveBtnSub.approveType == 2) {\r\n this.nodeShow = true;\r\n this.textShow = true;\r\n this.listBtnShow = false;\r\n this.listShow = false;\r\n this.node = \"\";\r\n if (this.submitNodeHasSearch) {\r\n this.nodeList = this.submitNodeList;\r\n } else {\r\n let data = {\r\n taskId: this.taskId,\r\n };\r\n api.getNextAllNodeList(data, (res) => {\r\n if (res.code == 0) {\r\n this.nodeList = res.data.NodeList;\r\n this.submitNodeList = res.data.NodeList;\r\n this.submitNodeHasSearch = true;\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n }\r\n } else if (approveBtnSub.approveType == 7 || approveBtnSub.approveType == 8) {\r\n this.textShow = false;\r\n this.nodeShow = false;\r\n this.listBtnShow = true;\r\n } else {\r\n this.nodeList = [];\r\n this.nodeShow = false;\r\n this.textShow = true;\r\n this.listBtnShow = false;\r\n this.listShow = false;\r\n }\r\n },\r\n nodeIdCallback(node) {\r\n this.node = node;\r\n if (node.needAssign === true) {\r\n if (node.assignList == \"getAll\") {\r\n this.userAllOption = {\r\n title: \"选择处理人\",\r\n };\r\n this.userAllDialog = true;\r\n } else {\r\n this.userOption = {\r\n title: \"选择处理人\",\r\n tableId: \"plt/flowableUserList\",\r\n search: false,\r\n type: \"radio\", //checkbox,radio\r\n data: [],\r\n value: [],\r\n initSearchData: {\r\n assignList: node.assignList,\r\n },\r\n isPagination: true,\r\n url: \"/mftcc-flowable-server/user/pageByUserId\",\r\n };\r\n this.userDialog = true;\r\n }\r\n } else {\r\n this.$confirm(\r\n \"此操作将提交该笔业务到\" + node.name + \"节点\",\r\n \"是否继续?\",\r\n \"提示\",\r\n {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n }\r\n ).then(() => {\r\n this.doCommit(node.id, node.seqList, \"\", \"\");\r\n });\r\n }\r\n },\r\n userDialogCallback(user) {\r\n let userId = \"\";\r\n if (user.length > 0) {\r\n for (let i = 0; i < user.length; i++) {\r\n userId += user[i].userId;\r\n if (i < user.length - 1) {\r\n userId += \",\";\r\n }\r\n }\r\n this.doCommit(this.node.id, this.node.seqList, userId, \"\");\r\n this.node = {\r\n id: \"\",\r\n seqList: this.node.seqList,\r\n };\r\n } else {\r\n this.$alert(\"请选择审批人员\", \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n }\r\n },\r\n cancel() {\r\n if (this.approveShow) {\r\n this.approveShow = false;\r\n } else {\r\n this.visible = false;\r\n }\r\n },\r\n closeMessage() {\r\n this.messageShow = false;\r\n },\r\n needOperated() {\r\n let approveBtnSub = \"\";\r\n for (let approveBtn of this.approveBtnList) {\r\n if (approveBtn.id === this.appForm.type) {\r\n approveBtnSub = approveBtn;\r\n }\r\n }\r\n api.needOperated(\r\n {\r\n taskId: this.taskId,\r\n approveType: approveBtnSub.approveType,\r\n variables: JSON.stringify(this.variables),\r\n },\r\n (res) => {\r\n if (res.code == 0) {\r\n if (res.hasComplete === 0) {\r\n let nodeList = res.result.nodeList;\r\n if (nodeList !== undefined && nodeList !== null) {\r\n this.nodeIdRadio = true;\r\n this.nodeIdOption = {\r\n realField: \"id\",\r\n showField: \"name\",\r\n search: true,\r\n insert: false,\r\n group: false,\r\n data: nodeList.list,\r\n value: \"\",\r\n };\r\n } else {\r\n this.node = {\r\n id: res.result.targetFlowId,\r\n seqList: res.result.seqList[0],\r\n };\r\n if (res.result.assignList == \"getAll\") {\r\n this.userAllOption = {\r\n title: \"选择处理人\",\r\n };\r\n this.userAllDialog = true;\r\n } else {\r\n this.userOption = {\r\n title: \"选择处理人\",\r\n tableId: \"plt/flowableUserList\",\r\n search: false,\r\n type: \"checkbox\", //checkbox,radio\r\n data: [],\r\n value: [],\r\n initSearchData: {\r\n assignList: res.result.assignList,\r\n },\r\n isPagination: true,\r\n url: \"/mftcc-flowable-server/user/pageByUserId\",\r\n };\r\n this.userDialog = true;\r\n }\r\n }\r\n } else {\r\n this.doCommit();\r\n }\r\n } else {\r\n this.$alert(res.msg, \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n }\r\n }\r\n );\r\n },\r\n doCommit(targetNodeId, seqList, nextUserId, listStr) {\r\n let approveBtnSub = \"\";\r\n for (let approveBtn of this.approveBtnList) {\r\n if (approveBtn.id === this.appForm.type) {\r\n approveBtnSub = approveBtn;\r\n }\r\n }\r\n let flowType = \"\";\r\n if (seqList != null || nextUserId != null) {\r\n flowType = \"11\";\r\n } else {\r\n flowType = approveBtnSub.approveType;\r\n }\r\n if (approveBtnSub.approveType == 2 || approveBtnSub.approveType == 5) {\r\n targetNodeId = this.node;\r\n }\r\n if (approveBtnSub.approveType == 7 || approveBtnSub.approveType == 8) {\r\n if (this.addNodeList.length == 0) {\r\n this.$alert(\"请配置节点信息\", \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n return;\r\n } else {\r\n var nodes = [];\r\n for (var i = 0; i < this.addNodeList.length; i++) {\r\n var node = {};\r\n node[\"name\"] = this.addNodeList[i].nodeName;\r\n node[\"assignee\"] = this.addNodeList[i].assigneeId;\r\n nodes.push(node);\r\n }\r\n listStr = JSON.stringify(nodes);\r\n }\r\n }\r\n let data = {\r\n taskId: this.taskId,\r\n flowType: flowType,\r\n approvalContents: this.appForm.approve,\r\n approveBtnId: approveBtnSub.id,\r\n approveBtnName: approveBtnSub.approveIdea,\r\n targetNodeId: targetNodeId,\r\n listStr: listStr,\r\n nextUserId: nextUserId,\r\n seqList: seqList,\r\n bizMark: this.bizMark,\r\n variables: this.variables,\r\n methodParam: this.methodParam,\r\n };\r\n\r\n if (this.appBizFormData) {\r\n data.appBizFormData = JSON.stringify(this.appBizFormData);\r\n }\r\n if (this.appPageDataMethod) {\r\n if (typeof this.$refs.componentAppPage[this.appPageDataMethod] == \"function\") {\r\n const innerPageData = this.$refs.componentAppPage[this.appPageDataMethod](\r\n (res) => {\r\n data.appPageData = res;\r\n this.doCommit4Iframe(data);\r\n }\r\n );\r\n } else {\r\n this.$alert(\r\n \"未找到审批弹层页面数据回调函数【\" + this.appPageDataMethod + \"】\",\r\n \"提示\",\r\n {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n }\r\n );\r\n }\r\n } else {\r\n this.doCommit4Iframe(data);\r\n }\r\n },\r\n doCommit4Iframe(data) {\r\n this.approveShow = false;\r\n if (typeof this.$refs.component[this.method] == \"function\") {\r\n this.$refs.component[this.method](JSON.stringify(data), (res) => {\r\n if (res.code == 0) {\r\n this.$message.success(res.msg);\r\n this.visible = false;\r\n this.$emit(\"submitSuccess\");\r\n } else {\r\n this.$alert(res.msg, \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n }\r\n });\r\n } else {\r\n this.$alert(\"未找到审批提交函数【\" + this.method + \"】\", \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n }\r\n },\r\n approve() {\r\n if (this.approveShow) {\r\n if (this.appFormId != \"\") {\r\n this.$refs.appBizForm.validateForm((valid) => {\r\n if (valid === true) {\r\n this.appBizFormData = this.$refs.appBizForm.getFormValue();\r\n this.appFormSubmit();\r\n }\r\n });\r\n } else {\r\n this.appFormSubmit();\r\n }\r\n } else {\r\n this.approveShow = true;\r\n if (this.appFormId != \"\") {\r\n if (this.appFormInitMethod) {\r\n if (typeof this.$refs.component[this.appFormInitMethod] == \"function\") {\r\n this.$refs.component[this.appFormInitMethod]((res) => {\r\n this.$refs.appBizForm.setFormValue(res);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n },\r\n appFormSubmit() {\r\n this.$refs.appForm.validate((valid) => {\r\n if (valid === true) {\r\n this.$confirm(\"此操作将提交该笔业务, 是否继续?\", \"提示\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n }).then(() => {\r\n if (!this.method) {\r\n this.$alert(\"缺少审批提交函数\", \"提示\", {\r\n type: \"error\",\r\n dangerouslyUseHTMLString: true,\r\n });\r\n return;\r\n }\r\n if (this.variablesMethod) {\r\n if (typeof this.$refs.component[this.variablesMethod] == \"function\") {\r\n let formData = {};\r\n if (this.$refs.appBizForm) {\r\n formData = this.$refs.appBizForm.getFormValue();\r\n }\r\n this.$refs.component[this.variablesMethod](formData, (res) => {\r\n this.variables = res;\r\n this.needOperated();\r\n });\r\n }\r\n } else {\r\n this.needOperated();\r\n }\r\n });\r\n }\r\n });\r\n },\r\n showMessage() {\r\n this.$message({\r\n type: \"warning\",\r\n dangerouslyUseHTMLString: true,\r\n message: \"<strong>这是 <i>HTML</i> 片段</strong>\",\r\n });\r\n },\r\n openTimeLine() {\r\n if (this.timeLineShow) {\r\n this.timeLineShow = false;\r\n } else {\r\n this.timeLineShow = true;\r\n }\r\n },\r\n getApprovalDetail(taskId, taskType) {\r\n let data = {\r\n taskId: taskId,\r\n taskType: taskType,\r\n bizMark: this.bizMark,\r\n };\r\n api.getApprovalDetail(data, (res) => {\r\n if (res.code == 0) {\r\n debugger;\r\n this.backNodeHasSearch = false;\r\n this.submitNodeHasSearch = false;\r\n\r\n this.methodParam = res.data.methodParam || {};\r\n this.methodParam.traceNo = this.traceNo;\r\n\r\n this.method = res.data.method;\r\n this.variablesMethod = res.data.variablesMethod;\r\n if (res.data.showGuide) {\r\n this.messageShow = true;\r\n } else {\r\n this.messageShow = false;\r\n }\r\n\r\n this.resAppPage(res.data.formUrl);\r\n\r\n if (res.data.approveGuide) {\r\n this.approveGuide = res.data.approveGuide.guide;\r\n }\r\n this.approveBtnList = res.data.approveBtnList;\r\n this.appPage = res.data.appPage;\r\n\r\n this.resAppPageInner(this.appPage);\r\n if (!this.appPage) {\r\n this.appFormId = res.data.appFormId;\r\n this.appFormInitMethod = res.data.appFormInitMethod;\r\n }\r\n this.appPageMethodParam = res.data.appPageMethodParam || {};\r\n this.appPageDataMethod = res.data.appPageDataMethod;\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n },\r\n resAppPage(pagePath) {\r\n this.page = null;\r\n const pathObj = this.resPath(pagePath);\r\n this.getApp(pathObj, \"out\");\r\n },\r\n resAppPageInner(pagePath) {\r\n this.page4app = null;\r\n const pathObj = this.resPath(pagePath);\r\n this.getApp(pathObj, \"in\");\r\n },\r\n getApp(pathObj, state) {\r\n if (!pathObj) {\r\n return;\r\n }\r\n this.$singleSpa\r\n .toLoadPromise(this.$singleSpa.getApp(pathObj.productName))\r\n .then((res) => {\r\n res.loadApp().then((res) => {\r\n const apps = res.default;\r\n const app = apps[pathObj.spaPath];\r\n if (state == \"out\") {\r\n this.page = app;\r\n this.appClassName = pathObj.productName;\r\n } else if (state == \"in\") {\r\n this.page4app = app;\r\n this.appPageClassName = pathObj.productName;\r\n }\r\n });\r\n });\r\n },\r\n resPath(pagePath) {\r\n if (!pagePath) {\r\n return null;\r\n }\r\n pagePath = pagePath.replace(/\\s+/g, \"\");\r\n if (/.vue$/.test(pagePath)) {\r\n pagePath = pagePath.substring(0, pagePath.length - 4);\r\n }\r\n if (pagePath.startsWith(\"/\")) {\r\n pagePath = pagePath.substring(1);\r\n }\r\n let productName = pagePath.split(\"/\")[0];\r\n let spaPath = pagePath.substring(productName.length);\r\n return { productName, spaPath };\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.appDialog {\r\n margin-top: 6vh !important;\r\n width: 90%;\r\n height: 90%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.fullDialog {\r\n margin: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.appDialog > .el-dialog__body {\r\n height: calc(100% - 52px);\r\n padding: 30px 20px 10px 20px;\r\n overflow: auto;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content {\r\n height: 100%;\r\n overflow: auto;\r\n position: relative;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content > .component {\r\n height: calc(100% - 78px);\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content > .component-full {\r\n height: calc(100% - 20px);\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog .el-drawer__wrapper {\r\n position: absolute;\r\n /* margin-bottom: 70px; */\r\n}\r\n.approveDrawer,\r\n.timeLineDrawer {\r\n outline: none;\r\n padding: 25px;\r\n height: auto !important;\r\n overflow: auto;\r\n max-height: 100%;\r\n flex-direction: row;\r\n}\r\n.approveDrawer.appPage {\r\n height: 100% !important;\r\n}\r\n.timeLineDrawer > .el-drawer__body {\r\n height: 100%;\r\n}\r\n.addNodelog {\r\n height: 60%;\r\n}\r\n.addNodelog > .el-dialog__body {\r\n height: 70%;\r\n overflow-y: auto;\r\n}\r\n.addNodelog > .el-dialog__body > .dialog-content {\r\n height: 100%;\r\n}\r\n.addNodelog > .el-dialog__body > .dialog-content > .component {\r\n height: 90%;\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog .appFormRow {\r\n margin-bottom: 22px;\r\n height: calc(100% - 160px);\r\n overflow: auto;\r\n border-bottom: 1px solid #f1f1f1;\r\n}\r\n.appDialog .appFormRow2 {\r\n text-align: left;\r\n height: 160px;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.appDialog {\r\n margin-top: 6vh !important;\r\n width: 90%;\r\n height: 90%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.fullDialog {\r\n margin: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.appDialog > .el-dialog__body {\r\n height: calc(100% - 52px);\r\n padding: 30px 20px 10px 20px;\r\n overflow: auto;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content {\r\n height: 100%;\r\n overflow: auto;\r\n position: relative;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content > .component {\r\n height: calc(100% - 78px);\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog > .el-dialog__body > .dialog-content > .component-full {\r\n height: calc(100% - 20px);\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog .el-drawer__wrapper {\r\n position: absolute;\r\n /* margin-bottom: 70px; */\r\n}\r\n.approveDrawer,\r\n.timeLineDrawer {\r\n outline: none;\r\n padding: 25px;\r\n height: auto !important;\r\n overflow: auto;\r\n max-height: 100%;\r\n -webkit-box-orient: horizontal;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: row;\r\n flex-direction: row;\r\n}\r\n.approveDrawer.appPage {\r\n height: 100% !important;\r\n}\r\n.timeLineDrawer > .el-drawer__body {\r\n height: 100%;\r\n}\r\n.addNodelog {\r\n height: 60%;\r\n}\r\n.addNodelog > .el-dialog__body {\r\n height: 70%;\r\n overflow-y: auto;\r\n}\r\n.addNodelog > .el-dialog__body > .dialog-content {\r\n height: 100%;\r\n}\r\n.addNodelog > .el-dialog__body > .dialog-content > .component {\r\n height: 90%;\r\n overflow-y: auto;\r\n margin-top: 20px;\r\n}\r\n.appDialog .appFormRow {\r\n margin-bottom: 22px;\r\n height: calc(100% - 160px);\r\n overflow: auto;\r\n border-bottom: 1px solid #f1f1f1;\r\n}\r\n.appDialog .appFormRow2 {\r\n text-align: left;\r\n height: 160px;\r\n}\r\n","<template>\r\n <el-steps :space=\"space\" :active=\"active\" class=\"flow-steps\" ref=\"flowSteps\">\r\n <el-step v-for=\"item in stepData\" :key=\"item.id\">\r\n <template slot=\"icon\" >\r\n <img v-if=\"item.active\" src=\"../../assets/flowable/active.png\">\r\n <i v-else-if=\"item.stoped\" class=\"icon\"></i>\r\n <i v-else class=\"icon\"></i>\r\n </template>\r\n <template slot=\"title\">\r\n <span :class=\"'title '+item.class\">{{ item.name }}</span>\r\n </template>\r\n </el-step>\r\n </el-steps>\r\n</template>\r\n\r\n<script>\r\nimport api from '../../api/flowable'\r\nexport default {\r\n name:\"bizTimeLine\",\r\n title:\"bizTimeLine\",\r\n data() {\r\n return {\r\n stepData: [],\r\n active: -1,\r\n space:106\r\n }\r\n },\r\n props: [\"traceNo\",\"bizMark\",\"option\"],\r\n created(){\r\n this.init();\r\n },\r\n methods: {\r\n refresh(){\r\n this.init();\r\n },\r\n init(){\r\n let param = {};\r\n if(this.option){\r\n param.option = this.option;\r\n }else{\r\n param.traceNo = this.traceNo;\r\n param.bizMark = this.bizMark;\r\n }\r\n this.simulationByTraceNo(param);\r\n },\r\n simulationByTraceNo(param){\r\n api.simulationByTraceNo(param, res => {\r\n if(res.code == 0){\r\n let array = [];\r\n let task = res.task;\r\n let isEnd = res.isEnd;\r\n if(!task){\r\n task = {\r\n isEnd,\r\n isSuspended:false\r\n }\r\n }else{\r\n task.isEnd = isEnd;\r\n task.isSuspended = false;\r\n }\r\n let nodes = res.data.node;\r\n for(let i in nodes){\r\n let node = nodes[i];\r\n if(this.resLineNode(node)){\r\n let item = {\r\n id:node.id,\r\n name:node.name,\r\n class:\"\"\r\n };\r\n if(task&&task.TASK_DEF_ID == node.id){\r\n if(task.APPROVE_TYPE == \"stoped\"){\r\n item.stoped = true;\r\n }else{\r\n item.active = true;\r\n if(!task.TASK_NAME){\r\n task.TASK_NAME = node.name;\r\n }\r\n if(node.documentation == \"org.flowable.bpmn.model.ReceiveTask\"){\r\n task.isSuspended = true;\r\n }\r\n }\r\n this.active = array.length;\r\n }\r\n array.push(item);\r\n }\r\n }\r\n if(this.active == -1|| isEnd == true){\r\n this.active = array.length;\r\n }\r\n this.$emit('getTask',task);\r\n this.stepData = array;\r\n \r\n let el = this.$refs.flowSteps.$el;\r\n let width = el.clientWidth;\r\n if(width/106<array.length){\r\n this.space = 61;\r\n el.classList.add(\"up\");\r\n for(let a in array){\r\n if(a%2 != 0){\r\n array[a].class = \"up\";\r\n }\r\n }\r\n }else{\r\n this.space = '10%';\r\n }\r\n\r\n }else{\r\n this.$message.error(res.msg);\r\n }\r\n });\r\n },\r\n resLineNode(node){\r\n let nodeTypeObj = node.attributes.nodeType;\r\n if(nodeTypeObj&&nodeTypeObj[0].value == \"bizTask\"){//业务任务\r\n return true;\r\n }else if(node.documentation == \"org.flowable.bpmn.model.CallActivity\"){//子流程\r\n return true;\r\n }else if(node.documentation == \"org.flowable.bpmn.model.ServiceTask\"){//服务任务\r\n return false;\r\n }else if(node.documentation == \"org.flowable.bpmn.model.ReceiveTask\"){//接收任务\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n}\r\n</script>\r\n<style>\r\n.flow-steps{\r\n padding-top: 16px;\r\n height: 62px;\r\n background: #FFF;\r\n}\r\n.flow-steps.up{\r\n padding-top: 24px;\r\n}\r\n.flow-steps .el-step__icon.is-text{\r\n height: 12px;\r\n width: 12px;\r\n top: 9px;\r\n position: absolute;\r\n}\r\n.flow-steps .is-process .el-step__icon.is-text{\r\n border:none;\r\n top: 10px;\r\n}\r\n.flow-steps .is-finish .el-step__icon.is-text{\r\n border: 1px solid #5D92DD;\r\n}\r\n.flow-steps .is-wait .el-step__icon.is-text{\r\n border: 1px solid #CFDDF1;\r\n}\r\n.flow-steps .el-step.is-horizontal .el-step__line{\r\n height: 12px;\r\n top: 9px;\r\n left: 6px;\r\n right: -6px;\r\n}\r\n.flow-steps .is-finish .el-step__line{\r\n background-image: linear-gradient(#7BA8E8,#79A7E8, #5D92DD);\r\n}\r\n\r\n.flow-steps .is-process .el-step__line,\r\n.flow-steps .is-wait .el-step__line{\r\n background-color:#E8EFF8 ;\r\n}\r\n.flow-steps .el-step__title{\r\n line-height: unset;\r\n font-size: 14px;\r\n font-weight: unset;\r\n width: 90px;\r\n margin-left: -14px;\r\n}\r\n.flow-steps .el-step .el-step__main{\r\n top: 36px;\r\n position: absolute;\r\n}\r\n.flow-steps .el-step .el-step__main:nth-child(2){\r\n top: 36px;\r\n position: absolute;\r\n}\r\n.flow-steps .title{\r\n text-align: center;\r\n display: block;\r\n}\r\n.flow-steps .is-finish .title{\r\n color: #3D3D3D;\r\n}\r\n.flow-steps .is-process .title{\r\n color:rgba(75,125,196,0.8);\r\n}\r\n.flow-steps .title.up{\r\n margin-top: -60px;\r\n}\r\n.flow-steps .is-wait .title{\r\n color: #999999;\r\n}\r\n.flow-steps .el-step__head{\r\n margin-left: 26px;\r\n}\r\n.flow-steps .el-step__line-inner{\r\n border: none;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.flow-steps{\r\n padding-top: 16px;\r\n height: 62px;\r\n background: #FFF;\r\n}\r\n.flow-steps.up{\r\n padding-top: 24px;\r\n}\r\n.flow-steps .el-step__icon.is-text{\r\n height: 12px;\r\n width: 12px;\r\n top: 9px;\r\n position: absolute;\r\n}\r\n.flow-steps .is-process .el-step__icon.is-text{\r\n border:none;\r\n top: 10px;\r\n}\r\n.flow-steps .is-finish .el-step__icon.is-text{\r\n border: 1px solid #5D92DD;\r\n}\r\n.flow-steps .is-wait .el-step__icon.is-text{\r\n border: 1px solid #CFDDF1;\r\n}\r\n.flow-steps .el-step.is-horizontal .el-step__line{\r\n height: 12px;\r\n top: 9px;\r\n left: 6px;\r\n right: -6px;\r\n}\r\n.flow-steps .is-finish .el-step__line{\r\n background-image: -webkit-gradient(linear,left top, left bottom,from(#7BA8E8),color-stop(#79A7E8), to(#5D92DD));\r\n background-image: linear-gradient(#7BA8E8,#79A7E8, #5D92DD);\r\n}\r\n.flow-steps .is-process .el-step__line,\r\n.flow-steps .is-wait .el-step__line{\r\n background-color:#E8EFF8 ;\r\n}\r\n.flow-steps .el-step__title{\r\n line-height: unset;\r\n font-size: 14px;\r\n font-weight: unset;\r\n width: 90px;\r\n margin-left: -14px;\r\n}\r\n.flow-steps .el-step .el-step__main{\r\n top: 36px;\r\n position: absolute;\r\n}\r\n.flow-steps .el-step .el-step__main:nth-child(2){\r\n top: 36px;\r\n position: absolute;\r\n}\r\n.flow-steps .title{\r\n text-align: center;\r\n display: block;\r\n}\r\n.flow-steps .is-finish .title{\r\n color: #3D3D3D;\r\n}\r\n.flow-steps .is-process .title{\r\n color:rgba(75,125,196,0.8);\r\n}\r\n.flow-steps .title.up{\r\n margin-top: -60px;\r\n}\r\n.flow-steps .is-wait .title{\r\n color: #999999;\r\n}\r\n.flow-steps .el-step__head{\r\n margin-left: 26px;\r\n}\r\n.flow-steps .el-step__line-inner{\r\n border: none;\r\n}\r\n","<template>\r\n <el-dialog\r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n :close-on-click-modal=\"false\"\r\n class=\"wkf-user-Dialog\"\r\n >\r\n <div slot=\"title\" class=\"dialog-header\">\r\n <label>选择人员</label>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-row>\r\n <el-col :span=\"12\" class=\"br-tree\">\r\n <div class=\"content\">\r\n <el-tree\r\n :data=\"treeData\"\r\n node-key=\"id\"\r\n highlight-current\r\n check-strictly\r\n :default-expanded-keys=\"expandedKeys\"\r\n :show-checkbox=\"false\"\r\n :props=\"defaultProps\"\r\n :filter-node-method=\"filterNode\"\r\n :expand-on-click-node=\"false\"\r\n @current-change=\"handleCheck\"\r\n ref=\"tree\"\r\n style=\"padding: 20px 0px 0 20px\"\r\n >\r\n </el-tree>\r\n </div>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <div class=\"user-group\">\r\n <template>\r\n <el-radio-group v-model=\"userCheck\">\r\n <el-radio v-for=\"user in userArray\" :key=\"user.id\" :label=\"user.id\"\r\n >{{ user.title }}\r\n </el-radio>\r\n </el-radio-group>\r\n </template>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport { get, postJson } from \"../../axios\";\r\nexport default {\r\n data() {\r\n return {\r\n title: \"选择人员\",\r\n visible: this.show,\r\n defaultProps: {\r\n children: \"children\",\r\n label: \"title\",\r\n },\r\n expandedKeys: [],\r\n treeData: [],\r\n userArray: [],\r\n userCheck: [],\r\n allUserArray: [],\r\n checkAll: false,\r\n isIndeterminate: false,\r\n };\r\n },\r\n props: [\"show\", \"initData\", \"type\", \"searchData\"],\r\n watch: {\r\n show() {\r\n this.visible = this.show;\r\n if (this.visible === true) {\r\n this.getTreeData();\r\n }\r\n },\r\n },\r\n created() {\r\n this.getTreeData();\r\n },\r\n methods: {\r\n userCheckedChange() {\r\n let checkedCount = 0;\r\n for (let user of this.userArray) {\r\n if (this.userCheck.indexOf(user.id) != -1) {\r\n checkedCount += 1;\r\n }\r\n }\r\n this.checkAll = checkedCount > 0 && checkedCount === this.userArray.length;\r\n this.isIndeterminate = checkedCount > 0 && checkedCount < this.userArray.length;\r\n },\r\n userChange(value) {\r\n if (value === true) {\r\n this.$refs.userSelect.blur();\r\n }\r\n },\r\n getUsers(data, users) {\r\n if (!(users instanceof Array)) {\r\n users = [];\r\n }\r\n for (let treeNode of data) {\r\n if (treeNode.user instanceof Array) {\r\n users = users.concat(treeNode.user);\r\n }\r\n if (treeNode.children instanceof Array) {\r\n users = this.getUsers(treeNode.children, users);\r\n }\r\n }\r\n return users;\r\n },\r\n getTreeData() {\r\n this.userArray = [];\r\n this.treeData = [];\r\n this.isIndeterminate = false;\r\n let data = this.searchData || {};\r\n postJson(\r\n \"/mftcc-flowable-server/br/listForTreeAll\",\r\n data,\r\n true,\r\n (res) => {\r\n this.searchData.pageNo = \"1\";\r\n this.searchData.pageSize = \"-1\";\r\n postJson(\r\n \"/mftcc-sys-server/sys/sysUser/findByPage\",\r\n this.searchData,\r\n true,\r\n (result) => {\r\n if (result.code == 0) {\r\n for (var i = 0; i < res.data.length; i++) {\r\n var showData = res.data[i];\r\n showData.user = [];\r\n for (var j = 0, len = result.list.records.length; j < len; j++) {\r\n if (result.list.records[j].brNo == showData.id) {\r\n var user = {};\r\n user[\"id\"] = result.list.records[j].opNo.toString();\r\n user[\"title\"] = result.list.records[j].opName.toString();\r\n showData.user.push(user);\r\n }\r\n }\r\n }\r\n this.treeData = res.data;\r\n this.allUserArray = this.unique(this.getUsers(res.data));\r\n if (typeof this.initData == \"string\") {\r\n this.userCheck = this.initData;\r\n } else {\r\n this.userCheck = \"\";\r\n }\r\n }\r\n }\r\n );\r\n },\r\n (error) => {\r\n this.userCheck = [];\r\n }\r\n );\r\n },\r\n submit() {\r\n if (this.userCheck != null && this.userCheck != \"\") {\r\n let result = [];\r\n for (let user of this.allUserArray) {\r\n if (user.id === this.userCheck) {\r\n result.push(user);\r\n }\r\n }\r\n\r\n this.$emit(\"callback\", result);\r\n this.visible = false;\r\n } else {\r\n this.$message(\"请选择审批人\");\r\n }\r\n },\r\n filterNode(value, data) {\r\n if (!value) return true;\r\n return data[dp.label].indexOf(value) !== -1;\r\n },\r\n unique(arr1) {\r\n const res = new Map();\r\n return arr1.filter((a) => !res.has(a.id) && res.set(a.id, 1));\r\n },\r\n handleCheck(currentObj, treeStatus) {\r\n if (currentObj.user instanceof Array) {\r\n this.userArray = this.unique(currentObj.user);\r\n } else {\r\n this.userArray = [];\r\n }\r\n this.userCheckedChange();\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.wkf-user-Dialog .el-tree {\r\n height: 300px;\r\n overflow: auto;\r\n}\r\n.wkf-user-Dialog .el-dialog {\r\n width: 500px;\r\n}\r\n.wkf-user-Dialog .dialog-header {\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n.wkf-user-Dialog .dialog-header label {\r\n position: absolute;\r\n left: 20px;\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row {\r\n border: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .br-tree {\r\n border-right: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .user-group {\r\n padding: 20px 0px 0 20px;\r\n width: 209px;\r\n height: 300px;\r\n overflow-y: auto;\r\n}\r\n.el-tree-node__label {\r\n font-size: 14px;\r\n}\r\n.user-group .el-radio {\r\n width: 75%;\r\n margin: 10px;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.wkf-user-Dialog .el-tree {\r\n height: 300px;\r\n overflow: auto;\r\n}\r\n.wkf-user-Dialog .el-dialog {\r\n width: 500px;\r\n}\r\n.wkf-user-Dialog .dialog-header {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: end;\r\n -ms-flex-pack: end;\r\n justify-content: flex-end;\r\n}\r\n.wkf-user-Dialog .dialog-header label {\r\n position: absolute;\r\n left: 20px;\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row {\r\n border: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .br-tree {\r\n border-right: 1px solid rgb(235, 235, 235);\r\n}\r\n.wkf-user-Dialog .dialog-content .el-row .user-group {\r\n padding: 20px 0px 0 20px;\r\n width: 209px;\r\n height: 300px;\r\n overflow-y: auto;\r\n}\r\n.el-tree-node__label {\r\n font-size: 14px;\r\n}\r\n.user-group .el-radio {\r\n width: 75%;\r\n margin: 10px;\r\n}\r\n","<template>\r\n <div class=\"mftcc-form-item\">\r\n <template v-for=\"(group,index) in props.group\">\r\n <el-col\r\n :key=\"index + 'field'\"\r\n :span=\"Math.floor((24-((props.group.length-1)*2))/props.group.length)\"\r\n >\r\n <template v-if=\"designer === true\">\r\n <form-item\r\n v-model=\"group.value\"\r\n v-bind=\"{props:group}\"\r\n :class=\"{'is-helper':showHelper===group, 'is-select':editField===group}\"\r\n :designer=\"designer\"\r\n @mouseenter.native=\"handleMouseEnter(group)\"\r\n @mouseleave.native=\"handleMouseLeave(group)\"\r\n @click.native.stop=\"handleClick(group)\"\r\n >\r\n <div slot=\"widgets-tools\" class=\"group-tools\">\r\n <i class=\"el-icon-circle-plus-outline\" @click=\"addRow(index)\"></i>\r\n <i class=\"el-icon-remove-outline\" @click=\"delRow(index)\"></i>\r\n </div>\r\n </form-item>\r\n </template>\r\n <template v-else>\r\n <form-item\r\n v-model=\"value\"\r\n v-bind=\"{props:group}\"\r\n :designer=\"designer\"\r\n >\r\n </form-item>\r\n </template> \r\n </el-col>\r\n <el-col\r\n v-if=\"index !== (props.group.length-1)\"\r\n :key=\"index + 'line'\"\r\n :span=\"2\"\r\n style=\"text-align: center;\"\r\n >{{ isEmpty(props.separator)?'-':props.separator }}</el-col>\r\n </template>\r\n </div>\r\n</template>\r\n<script>\r\nimport formUtil from \"../../utils/formUtil\";\r\nexport default {\r\n data() {\r\n return {\r\n showHelper: null,\r\n editField: null,\r\n isEmpty: formUtil.isEmpty,\r\n groupItem: {}\r\n };\r\n },\r\n model: {\r\n prop: \"value\", //值可以随意命名\r\n event: \"returnBack\" //方法也可以随意命名\r\n },\r\n props: {\r\n value:{},\r\n designer: {\r\n type: Boolean,\r\n default() {\r\n return false;\r\n }\r\n },\r\n props: {\r\n type: Object,\r\n default() {\r\n return {};\r\n }\r\n }\r\n },\r\n methods: {\r\n handleMouseEnter(item) {\r\n if (this.$dragula.dragging) return;\r\n this.showHelper = item;\r\n },\r\n handleMouseLeave(item) {\r\n this.showHelper = null;\r\n },\r\n handleClick(item) {\r\n this.editField = item;\r\n this.$store.commit(\"set_editField\", item);\r\n },\r\n addRow(index) {\r\n let groupItem = Object.assign({}, this.groupItem);\r\n this.props.group.splice(index + 1, 0, groupItem);\r\n },\r\n delRow(index) {\r\n this.props.group.splice(index, 1);\r\n }\r\n },\r\n created() {\r\n this.groupItem = Object.assign({}, this.props.group[0]);\r\n }\r\n};\r\n</script>\r\n<style scoped>\r\n.group-tools {\r\n position: absolute;\r\n right: 0px;\r\n top: 0px;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n}\r\n.group-tools i {\r\n margin: 3px 0px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.group-tools {\r\n position: absolute;\r\n right: 0px;\r\n top: 0px;\r\n height: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n}\r\n.group-tools i {\r\n margin: 3px 0px;\r\n}\r\n","<template>\r\n <el-alert\r\n :title=\"props.label\"\r\n type=\"success\"\r\n effect=\"dark\"\r\n class=\"title_label\"\r\n :closable=\"false\" style=\"margin-bottom: 22px;\"\r\n :class=\"designer===true?'mftcc-alert':''\">\r\n </el-alert>\r\n</template>\r\n<script>\r\nexport default {\r\n data() {\r\n return {\r\n title:\"标题\",\r\n }\r\n },\r\n props: {\r\n props: {\r\n type: Object,\r\n default() {\r\n return {};\r\n }\r\n },\r\n designer: {\r\n type: Boolean,\r\n default() {\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n</script>\r\n<style>\r\n.title_label{\r\n margin: 0 !important;\r\n border-radius: 0;\r\n background-color: #EDF2FA !important;\r\n color: rgba(20,20,20,1) !important;\r\n font-weight: 400;\r\n}\r\n.title_label .el-alert__title{\r\n font-size: 16px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.title_label{\r\n margin: 0 !important;\r\n border-radius: 0;\r\n background-color: #EDF2FA !important;\r\n color: rgba(20,20,20,1) !important;\r\n font-weight: 400;\r\n}\r\n.title_label .el-alert__title{\r\n font-size: 16px;\r\n}\r\n","<template>\r\n <el-form\r\n :label-position=\"option.labelPosition\"\r\n :model=\"formData\"\r\n :rules=\"rules\"\r\n :ref=\"formId\"\r\n :disabled=\"isEmpty(option.formDisabled) ? false : option.formDisabled\"\r\n label-width=\"150px\"\r\n :class=\"\r\n search === 'search'\r\n ? 'mftcc-form-search'\r\n : option.isExpand === true\r\n ? 'mftcc-form-expand'\r\n : option.query === 'query'\r\n ? 'mftcc-form-query'\r\n : 'mftcc-form'\r\n \"\r\n @submit.native.prevent\r\n >\r\n <el-table\r\n v-if=\"formFlag\"\r\n :data=\"tableData\"\r\n :show-header=\"false\"\r\n :span-method=\"rowColMergeHandler\"\r\n :row-style=\"rowStyleHandler\"\r\n empty-text=\" \"\r\n :class=\"isEmpty(option.formDisabled) ? '' : 'is-disabled'\"\r\n >\r\n <el-table-column\r\n v-for=\"(item, index) in tableCol\"\r\n :key=\"item.index\"\r\n :prop=\"item.index\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <form-item\r\n :props=\"scope.row[index + '']\"\r\n v-model=\"formData\"\r\n @click.native=\"\r\n scope.row[index + ''] && clickFunc(scope.row[index + ''], $event)\r\n \"\r\n :event=\"scope.row[index + ''] && events[scope.row[index + ''].fieldName]\"\r\n :pramDicItem=\"\r\n scope.row[index + ''] && pramDicItem[scope.row[index + ''].fieldName]\r\n \"\r\n :query=\"option.query\"\r\n ></form-item>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n\r\n <form-item\r\n v-for=\"(item, index) in hiddenItem\"\r\n :key=\"index\"\r\n :props=\"item\"\r\n v-model=\"formData\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n :event=\"events[item.fieldName]\"\r\n :pramDicItem=\"pramDicItem[item.fieldName]\"\r\n :query=\"option.query\"\r\n ></form-item>\r\n </el-form>\r\n</template>\r\n<script>\r\nimport { get, postJson, putJson, sync, getParameter } from \"../../../axios\";\r\nimport formUtil from \"../../../utils/formUtil\";\r\nexport default {\r\n props: [\"formId\", \"parentVm\", \"initData\", \"search\"],\r\n data() {\r\n return {\r\n formFlag: false,\r\n option: {},\r\n formData: {},\r\n events: {},\r\n pramDicItem: {},\r\n rules: {},\r\n isEmpty: formUtil.isEmpty,\r\n dateFormat: formUtil.dateFormat,\r\n original: null,\r\n hiddenItem: [],\r\n };\r\n },\r\n provide() {\r\n return {\r\n formData: this.formData,\r\n formItem: this.option.formItem,\r\n };\r\n },\r\n watch: {\r\n formData: {\r\n handler(val, oldVal) {\r\n let formItems = this.getFormItems(this.option.formItem);\r\n for (let j in formItems) {\r\n if (formItems[j].optionType === \"3\") {\r\n let searchData = {};\r\n let searchDataStr = formItems[j].library.searchDataStr || \"\";\r\n let searchDataArray = searchDataStr.split(\";\");\r\n for (let i in searchDataArray) {\r\n if (!this.isEmpty(searchDataArray[i])) {\r\n let searchDataObj = searchDataArray[i].split(\"-\");\r\n if (searchDataObj.length === 2) {\r\n let value = \"\";\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(searchDataObj[1]) == true) {\r\n let parm = searchDataObj[1].replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n } else {\r\n value = searchDataObj[1];\r\n }\r\n searchData[searchDataObj[0]] = value;\r\n }\r\n }\r\n }\r\n this.$set(formItems[j].library, \"searchData\", searchData);\r\n } else if (formItems[j].fieldType === \"pltuser\") {\r\n let brNo = formItems[j].option.brNo;\r\n let value = \"\";\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(brNo) == true) {\r\n let parm = brNo.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n } else {\r\n value = brNo;\r\n }\r\n this.$set(formItems[j].option, \"brNoVal\", value);\r\n let params = formItems[j].option.params;\r\n if (params) {\r\n let initSearchData = {};\r\n let paramArr = params.split(\";\");\r\n for (let i in paramArr) {\r\n let queryArr = paramArr[i].split(\"-\");\r\n let key = queryArr[0];\r\n let value = queryArr[1];\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(value) == true) {\r\n let parm = value.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n }\r\n initSearchData[key] = value;\r\n }\r\n this.$set(formItems[j].option, \"initSearchData\", initSearchData);\r\n }\r\n } else if (formItems[j].fieldType === \"flowableuser\") {\r\n let roleNo = formItems[j].option.roleNo;\r\n let value = \"\";\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(roleNo) == true) {\r\n let parm = roleNo.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n } else {\r\n value = roleNo;\r\n }\r\n this.$set(formItems[j].option, \"roleNoVal\", value);\r\n let params = formItems[j].option.params;\r\n if (params) {\r\n let initSearchData = {};\r\n let paramArr = params.split(\";\");\r\n for (let i in paramArr) {\r\n let queryArr = paramArr[i].split(\"-\");\r\n let key = queryArr[0];\r\n let value = queryArr[1];\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(value) == true) {\r\n let parm = value.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n }\r\n initSearchData[key] = value;\r\n }\r\n this.$set(formItems[j].option, \"initSearchData\", initSearchData);\r\n }\r\n } else if (formItems[j].fieldType === \"dialog\") {\r\n let params = formItems[j].option.params;\r\n if (params) {\r\n let initSearchData = {};\r\n let paramArr = params.split(\";\");\r\n for (let i in paramArr) {\r\n let queryArr = paramArr[i].split(\"-\");\r\n let key = queryArr[0];\r\n let value = queryArr[1];\r\n var reg = /^\\${.*}$/;\r\n if (reg.test(value) == true) {\r\n let parm = value.replace(/^(\\s|\\${)+|(\\s|})+$/g, \"\");\r\n value = val[parm];\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.query[parm];\r\n }\r\n if (value === undefined || value === \"\") {\r\n value = this.$route.params[parm];\r\n }\r\n }\r\n initSearchData[key] = value;\r\n }\r\n this.$set(formItems[j].option, \"initSearchData\", initSearchData);\r\n }\r\n }\r\n }\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n formId: {\r\n handler(val, oldVal) {\r\n this.initForm();\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n initData() {\r\n this.initForm();\r\n },\r\n },\r\n computed: {\r\n tableCol() {\r\n let tableCol = [];\r\n for (let i = 0; i < this.option.columns; i++) {\r\n let index = i + \"\";\r\n tableCol.push({ index: index });\r\n }\r\n return tableCol;\r\n },\r\n tableData() {\r\n let formItem = this.option.formItem.filter((item) => {\r\n if (item.isShow) {\r\n return true;\r\n } else if (item.state && item.state.length > 0) {\r\n for (let sts of item.state) {\r\n if (sts.isShow !== false) {\r\n return true;\r\n }\r\n }\r\n } else if (item.fieldType == \"empty\" || item.fieldType == \"label\") {\r\n return true;\r\n }\r\n });\r\n let len = formItem.length;\r\n let tableData = new Array();\r\n for (let item of formItem) {\r\n let rowIndex = item.rowIndex;\r\n let colIndex = item.colIndex;\r\n if (!tableData[rowIndex]) {\r\n tableData[rowIndex] = {};\r\n }\r\n if (item.useState) {\r\n let active = item.state.find((i) => {\r\n return item.state === i.id;\r\n });\r\n item = Object.assign(item, active);\r\n }\r\n tableData[rowIndex][colIndex] = item;\r\n }\r\n this.original = JSON.parse(JSON.stringify(tableData));\r\n return tableData;\r\n },\r\n },\r\n methods: {\r\n unique(arr1) {\r\n const res = new Map();\r\n return arr1.filter((a) => !res.has(a.optCode) && res.set(a.optCode, 1));\r\n },\r\n returnCol(\r\n col = {},\r\n { rowIndex, colIndex, rowspan, colspan, rm = true, belong } = {}\r\n ) {\r\n let self = this;\r\n col.fieldType = col.fieldType || \"empty\";\r\n\r\n if (rowspan != void 0) {\r\n col.rowspan = rowspan;\r\n } else if (col.rowspan == void 0) {\r\n col.rowspan = 1;\r\n }\r\n if (colspan != void 0) {\r\n col.colspan = colspan;\r\n } else if (col.colspan == void 0) {\r\n col.colspan = 1;\r\n }\r\n if (rowIndex != void 0) {\r\n col.rowIndex = rowIndex;\r\n }\r\n if (colIndex != void 0) {\r\n col.colIndex = colIndex;\r\n }\r\n if (belong) {\r\n col.belong = belong;\r\n rm = false;\r\n }\r\n rm && delete col.belong;\r\n return col;\r\n },\r\n doBeforeForm(form) {\r\n let len = form.columns;\r\n let items = form.formItem;\r\n let arr = [];\r\n for (let col of items) {\r\n if (col.hasOwnProperty(\"colspan\") && col.hasOwnProperty(\"rowspan\")) {\r\n arr.push(col);\r\n continue;\r\n }\r\n let type = col.fieldType;\r\n if (col.isShow === false) {\r\n col.rowspan = 1;\r\n col.colspan = 1;\r\n arr.push(col);\r\n } else if (type == \"label\") {\r\n col.rowspan = 1;\r\n col.colspan = len;\r\n arr.push(col);\r\n for (let index = 1; index < len; index++) {\r\n arr.push(this.returnCol({}, { colspan: 0, rowspan: 0 }));\r\n }\r\n } else {\r\n col.rowspan = 1;\r\n col.colspan = col.colspan || 1;\r\n arr.push(col);\r\n if (col.colspan && col.colspan > 1) {\r\n for (let index = 1; index < col.colspan; index++) {\r\n arr.push(this.returnCol({}, { colspan: 0, rowspan: 0 }));\r\n }\r\n }\r\n }\r\n }\r\n form.formItem = arr;\r\n return form;\r\n },\r\n rowColMergeHandler({ row, column, rowIndex, columnIndex }) {\r\n let col = row[columnIndex + \"\"];\r\n return col && [col.rowspan, col.colspan];\r\n },\r\n resetForm(callback) {\r\n this.$refs[this.formId].resetFields();\r\n if (formUtil.isFunction(callback)) {\r\n callback();\r\n }\r\n },\r\n clickFunc(item, el) {\r\n let events = item.events;\r\n for (let i in events) {\r\n if (\r\n this.option.formDisabled !== true &&\r\n item.disabled !== true &&\r\n events[i].type === \"click\" &&\r\n formUtil.parentVmExist(this, events[i].callback)\r\n ) {\r\n this.parentVm._self[events[i].callback](el);\r\n }\r\n }\r\n },\r\n validateForm(callback) {\r\n this.$refs[this.formId].validate((valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n validateField(parm, callback) {\r\n this.$refs[this.formId].validateField(parm, (valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n clearValidate() {\r\n this.$nextTick(() => {\r\n if (arguments.length === 0) {\r\n this.$refs[this.formId].clearValidate();\r\n } else if (arguments.length >= 1) {\r\n this.$refs[this.formId].clearValidate(arguments[1]);\r\n }\r\n });\r\n },\r\n getFormItems(formItem) {\r\n let formItems = [];\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n formItems.push(groupItem[j]);\r\n }\r\n } else {\r\n formItems.push(formItem[i]);\r\n }\r\n }\r\n return formItems;\r\n },\r\n dateFormatType(formField, value, type) {\r\n try {\r\n if (this.isEmpty(value)) {\r\n return value;\r\n }\r\n let valueFormat = \"\";\r\n let format = \"\";\r\n if (type === \"date\" || type === \"dateGroup\") {\r\n valueFormat = \"yyyyMMdd\";\r\n format = \"yyyy-MM-dd\";\r\n } else if (type === \"datetime\" || type === \"datetimeGroup\") {\r\n valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n format = \"yyyy-MM-dd HH:mm:ss\";\r\n } else {\r\n return value;\r\n }\r\n if (!this.isEmpty(formField.dateFormat)) {\r\n if (!this.isEmpty(formField.dateFormat.valueFormat)) {\r\n valueFormat = formField.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(formField.dateFormat.format)) {\r\n format = formField.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n return value;\r\n } catch (error) {\r\n console.error(formField.fieldName + \"日期数据解析错误\");\r\n return value;\r\n }\r\n },\r\n async setFormValue(key, value) {\r\n if (key instanceof Object) {\r\n for (let i in key) {\r\n this.setFormValue(i, key[i]);\r\n }\r\n } else {\r\n let formItem = this.option.formItem;\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let formField = formItems[i];\r\n if (\r\n formField !== null &&\r\n (key === formField.fieldName ||\r\n key === formField.endFieldName ||\r\n key === formField.fieldDesc)\r\n ) {\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n let checkValue = [];\r\n if (!this.isEmpty(value)) {\r\n let checkArray = value.split(\"|\");\r\n for (let k in checkArray) {\r\n if (!this.isEmpty(checkArray[k])) {\r\n checkValue.push(checkArray[k]);\r\n }\r\n }\r\n }\r\n value = checkValue;\r\n } else if (formField.fieldType === \"cascader\") {\r\n if (this.option.query === \"query\") {\r\n let _this = formField;\r\n if (formField.library.url) {\r\n //从库中选择\r\n value = await this.getCascaderData(value, formField);\r\n } else {\r\n value = this.getCascaderDefaultData(value, formField);\r\n }\r\n } else {\r\n let checkValue = [];\r\n if (formField.multiple) {\r\n //多选\r\n let checkArray = value.split(\"|\");\r\n for (let k in checkArray) {\r\n if (!this.isEmpty(checkArray[k])) {\r\n checkValue.push(checkArray[k]);\r\n }\r\n }\r\n } else {\r\n //单选\r\n let checkArray = value.split(\"\\,\");\r\n for (let k in checkArray) {\r\n if (!this.isEmpty(checkArray[k])) {\r\n checkValue.push(checkArray[k]);\r\n }\r\n }\r\n }\r\n value = checkValue;\r\n }\r\n } else if (formField.fieldType === \"text\") {\r\n if (formField.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(value);\r\n } else if (formField.dataType === \"money(wan)\") {\r\n value = formUtil.numDiv(value, 10000);\r\n } else if (formField.dataType === \"money(baiwan)\") {\r\n value = formUtil.numDiv(value, 1000000);\r\n } else if (formField.dataType === \"money(yi)\") {\r\n value = formUtil.numDiv(value, 100000000);\r\n } else if (formField.dataType === \"percentile\") {\r\n value = formUtil.numMulti(value, 100);\r\n } else if (formField.dataType === \"thousand\") {\r\n value = formUtil.numMulti(value, 1000);\r\n } else if (formField.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(value, 10000);\r\n }\r\n }\r\n if (this.option.query === \"query\") {\r\n let parmArray = this.pramDicItem[formField.fieldName];\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n if (formField.optionType === \"1\" && value) {\r\n let checkBoxValue = \"\";\r\n const selectItem = this.unique(formField.dicItem);\r\n for (let h in value) {\r\n if (!this.isEmpty(value[h])) {\r\n for (let dic of selectItem) {\r\n if (dic.optCode == value[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = dic.optName;\r\n } else {\r\n checkBoxValue = dic.optName + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (formField.optionType == \"2\" && value) {\r\n let checkBoxValue = \"\";\r\n for (let h in value) {\r\n if (!this.isEmpty(value[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (formField.optionType === \"3\" && value) {\r\n let checkBoxValue = \"\";\r\n const reponse = await sync.getParameter(\r\n formField.library.url,\r\n formField.library.searchData,\r\n true\r\n );\r\n let options = [];\r\n if (reponse.code === 0) {\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (\r\n formField.library.realField !== undefined &&\r\n formField.library.realField !== null &&\r\n formField.library.realField !== \"\"\r\n ) {\r\n realField = formField.library.realField;\r\n }\r\n if (\r\n formField.library.showField !== undefined &&\r\n formField.library.showField !== null &&\r\n formField.library.showField !== \"\"\r\n ) {\r\n showField = formField.library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n value: list[i][realField] + \"\",\r\n label: list[i][showField],\r\n };\r\n options.push(option);\r\n }\r\n } else {\r\n console.error(reponse.msg);\r\n }\r\n for (let h in value) {\r\n if (!this.isEmpty(value[h])) {\r\n for (let i in options) {\r\n if (options[i].value === value[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = options[i].label;\r\n } else {\r\n checkBoxValue = options[i].label + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n }\r\n } else if (formField.fieldType === \"switch\") {\r\n if (formField.switchValue.activeValue === value) {\r\n value = \"是\";\r\n } else {\r\n value = \"否\";\r\n }\r\n } else if (\r\n formField.fieldType === \"date\" ||\r\n formField.fieldType === \"datetime\" ||\r\n formField.fieldType === \"dateGroup\" ||\r\n formField.fieldType === \"datetimeGroup\" ||\r\n formField.fieldType === \"timeGroup\"\r\n ) {\r\n value = this.dateFormatType(formField, value, formField.fieldType);\r\n } else if (formField.fieldType === \"select\") {\r\n if (formField.optionType === \"1\" && value) {\r\n const selectItem = this.unique(formField.dicItem);\r\n for (let dic of selectItem) {\r\n if (dic.optCode == value) {\r\n value = dic.optName;\r\n break;\r\n }\r\n }\r\n } else if (formField.optionType == \"2\" && value) {\r\n let checkBoxValue = \"\";\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n } else if (formField.optionType === \"3\" && value) {\r\n let checkBoxValue = \"\";\r\n const reponse = await sync.getParameter(\r\n formField.library.url,\r\n formField.library.searchData,\r\n true\r\n );\r\n let options = [];\r\n if (reponse.code === 0) {\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (\r\n formField.library.realField !== undefined &&\r\n formField.library.realField !== null &&\r\n formField.library.realField !== \"\"\r\n ) {\r\n realField = formField.library.realField;\r\n }\r\n if (\r\n formField.library.showField !== undefined &&\r\n formField.library.showField !== null &&\r\n formField.library.showField !== \"\"\r\n ) {\r\n showField = formField.library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n value: list[i][realField],\r\n label: list[i][showField],\r\n };\r\n options.push(option);\r\n }\r\n } else {\r\n console.error(reponse.msg);\r\n }\r\n for (let i in options) {\r\n if (options[i].value === value) {\r\n value = options[i].label;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n }\r\n if (\r\n (this.option.query === \"query\" || this.option.formDisabled === true) &&\r\n !this.isEmpty(formField.formatter) &&\r\n formUtil.parentVmExist(this, formField.formatter)\r\n ) {\r\n value = this.parentVm._self[formField.formatter](value);\r\n }\r\n this.$set(this.formData, key, value);\r\n }\r\n }\r\n }\r\n },\r\n getFormValue() {\r\n let formItem = this.option.formItem;\r\n let data = JSON.parse(JSON.stringify(this.formData)); //深度copy\r\n if (arguments.length === 0) {\r\n for (let j in data) {\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let formField = formItems[i];\r\n if (\r\n formField !== null &&\r\n (j === formField.fieldName || j === formField.endFieldName)\r\n ) {\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n if (this.option.query != \"query\") {\r\n data[j] = (data[j] || []).join(\"|\");\r\n }\r\n } else if (formField.fieldType === \"text\") {\r\n let formTextValue = data[j];\r\n if (formField.dataType === \"money(yuan)\") {\r\n formTextValue = formUtil.delcommafy(formTextValue);\r\n } else if (formField.dataType === \"money(wan)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 10000);\r\n } else if (formField.dataType === \"money(baiwan)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 1000000);\r\n } else if (formField.dataType === \"money(yi)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 100000000);\r\n } else if (formField.dataType === \"percentile\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 100);\r\n } else if (formField.dataType === \"thousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 1000);\r\n } else if (formField.dataType === \"tenThousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 10000);\r\n }\r\n data[j] = formTextValue;\r\n } else if (formField.fieldType === \"cascader\") {\r\n if (this.option.query != \"query\") {\r\n if (formField.multiple) {\r\n //多选\r\n data[j] = data[formField.fieldName].join(\"|\");\r\n } else {\r\n //单选\r\n data[j] = data[formField.fieldName].join(\",\");\r\n }\r\n }\r\n } else if (formField.isDialog === true && formField.fieldDesc != \"\") {\r\n data[formField.fieldDesc] = formField.fieldDescValue;\r\n }\r\n }\r\n }\r\n }\r\n return data;\r\n } else if (arguments.length >= 1) {\r\n let result = this.getFormValue();\r\n if (!this.isEmpty(result)) {\r\n result = result[arguments[0]];\r\n }\r\n return result;\r\n }\r\n },\r\n async getCascaderData(value, formField) {\r\n const reponse = await sync.getParameter(\r\n formField.library.url,\r\n formField.library.searchDataStr,\r\n true\r\n );\r\n if (reponse.code === 0) {\r\n if (formField.multiple) {\r\n //多选\r\n let checkAllArray = value.split(\"|\");\r\n var res = \"\";\r\n for (let k in checkAllArray) {\r\n let checkArray = checkAllArray[k].split(\"\\,\");\r\n if (k > 0) {\r\n res += \"|\";\r\n }\r\n //是否显示全部\r\n if (formField.showAll) {\r\n var separator = \"/\";\r\n if (formField.separator != null) {\r\n separator = formField.separator;\r\n }\r\n res += this.getCascaderAllValueForDB(\r\n checkArray,\r\n reponse.list,\r\n formField,\r\n separator\r\n );\r\n } else {\r\n res += this.getCascaderValueForDB(checkArray, reponse.list, formField);\r\n }\r\n }\r\n return res;\r\n } else {\r\n //单选\r\n let checkArray = value.split(\"\\,\");\r\n //是否显示全部\r\n if (formField.showAll) {\r\n var separator = \"/\";\r\n if (formField.separator != null) {\r\n separator = formField.separator;\r\n }\r\n return this.getCascaderAllValueForDB(\r\n checkArray,\r\n reponse.list,\r\n formField,\r\n separator\r\n );\r\n } else {\r\n return this.getCascaderValueForDB(checkArray, reponse.list, formField);\r\n }\r\n }\r\n }\r\n },\r\n getCascaderDefaultData(value, formField) {\r\n if (formField.multiple) {\r\n //多选\r\n let checkAllArray = value.split(\"|\");\r\n var res = \"\";\r\n for (let k in checkAllArray) {\r\n let checkArray = checkAllArray[k].split(\"\\,\");\r\n if (k > 0) {\r\n res += \"|\";\r\n }\r\n //是否显示全部\r\n if (formField.showAll) {\r\n var separator = \"/\";\r\n if (formField.separator != null) {\r\n separator = formField.separator;\r\n }\r\n res += this.getCascaderAllValueByKey(\r\n formField.dicItem,\r\n checkArray[checkArray.length - 1],\r\n separator\r\n );\r\n } else {\r\n res += this.getCascaderValueByKey(\r\n formField.dicItem,\r\n checkArray[checkArray.length - 1]\r\n );\r\n }\r\n }\r\n return res;\r\n } else {\r\n //单选\r\n let checkArray = value.split(\"\\,\");\r\n //是否显示全部\r\n if (formField.showAll) {\r\n var separator = \"/\";\r\n if (formField.separator != null) {\r\n separator = formField.separator;\r\n }\r\n return this.getCascaderAllValueByKey(\r\n formField.dicItem,\r\n checkArray[checkArray.length - 1],\r\n separator\r\n );\r\n } else {\r\n return this.getCascaderValueByKey(\r\n formField.dicItem,\r\n checkArray[checkArray.length - 1]\r\n );\r\n }\r\n }\r\n },\r\n getCascaderValueForDB(checkArray, list, formField) {\r\n for (var i = 0; i < list.length; i++) {\r\n if (list[i][formField.library.realField] == checkArray[checkArray.length - 1]) {\r\n return list[i][formField.library.showField];\r\n }\r\n }\r\n },\r\n getCascaderAllValueForDB(checkArray, list, formField, separator) {\r\n var value = \"\";\r\n for (var j = 0; j < checkArray.length; j++) {\r\n for (var i = 0; i < list.length; i++) {\r\n if (list[i][formField.library.realField] == checkArray[j]) {\r\n if (value != \"\") {\r\n value = value + separator + list[i][formField.library.showField];\r\n } else {\r\n value = list[i][formField.library.showField];\r\n }\r\n }\r\n }\r\n }\r\n return value;\r\n },\r\n getCascaderValueByKey(data, field) {\r\n var value = \"\";\r\n for (let key in data) {\r\n if (data[key].optCode === field) {\r\n return data[key].optName;\r\n } else {\r\n if (data[key].children != null && data[key].children.length != 0) {\r\n value = this.getCascaderValueByKey(data[key].children, field);\r\n if (value != \"\" && value != null) {\r\n return value;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n getCascaderAllValueByKey(data, field, separator) {\r\n var value = \"\";\r\n for (let key in data) {\r\n if (data[key].optCode === field) {\r\n return data[key].optName;\r\n } else {\r\n if (data[key].children != null && data[key].children.length != 0) {\r\n value = this.getCascaderAllValueByKey(data[key].children, field, separator);\r\n if (value != \"\" && value != null) {\r\n return data[key].optName + separator + value;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n attr() {\r\n let formItem = this.option.formItem;\r\n if (arguments.length === 2) {\r\n let formField = null;\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n if (arguments[0] === groupItem[j].fieldName) {\r\n formField = groupItem[j];\r\n }\r\n }\r\n } else {\r\n if (arguments[0] === formItem[i].fieldName) {\r\n formField = formItem[i];\r\n }\r\n }\r\n }\r\n let value = \"\";\r\n if (formField !== null) {\r\n if (arguments[1] === \"dicItem\") {\r\n value = this.pramDicItem[arguments[0]];\r\n } else if (arguments[1] === \"events\") {\r\n value = this.events[arguments[0]];\r\n } else if (arguments[1] === \"rules\") {\r\n value = this.rules[arguments[0]];\r\n } else {\r\n value = formField[arguments[1]];\r\n }\r\n }\r\n return value;\r\n } else if (arguments.length >= 3) {\r\n let formField = null;\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n if (arguments[0] === groupItem[j].fieldName) {\r\n formField = groupItem[j];\r\n formField[\"formItem\"] = formItem[i];\r\n }\r\n }\r\n } else {\r\n if (arguments[0] === formItem[i].fieldName) {\r\n formField = formItem[i];\r\n }\r\n }\r\n }\r\n if (formField !== null) {\r\n let label = formField.label;\r\n if (arguments[1] === \"dicItem\") {\r\n this.$set(this.pramDicItem, arguments[0], arguments[2]);\r\n } else if (arguments[1] === \"events\") {\r\n //解析事件\r\n try {\r\n let eventsArray = arguments[2];\r\n let event = {};\r\n for (let evetIndex in eventsArray) {\r\n if (\r\n !this.isEmpty(eventsArray[evetIndex].type) &&\r\n eventsArray[evetIndex].type !== \"click\" &&\r\n formUtil.parentVmExist(this, eventsArray[evetIndex].callback)\r\n ) {\r\n event[eventsArray[evetIndex].type] = this.parentVm._self[\r\n eventsArray[evetIndex].callback\r\n ];\r\n }\r\n }\r\n this.$set(this.events, formField.fieldName, event);\r\n } catch (error) {\r\n console.error(\"事件解析错误:\" + error);\r\n this.$set(this.events, formField.fieldName, {});\r\n }\r\n } else if (arguments[1] === \"rules\") {\r\n //解析规则\r\n try {\r\n //解析规则\r\n let formRules = arguments[2];\r\n let fieldNameRules = [];\r\n if (formField.fieldType === \"text\") {\r\n let type = formField.dataType;\r\n if (type === \"int\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateInt;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"long\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateLong;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (\r\n type == \"double(2)\" ||\r\n type == \"double(4)\" ||\r\n type == \"double(6)\" ||\r\n type == \"money(fen)\" ||\r\n type == \"money(jiao)\" ||\r\n type == \"money(wan)\" ||\r\n type == \"money(baiwan)\" ||\r\n type == \"money(yi)\" ||\r\n type == \"percentile\" ||\r\n type === \"thousand\" ||\r\n type == \"tenThousand\"\r\n ) {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateNumber;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"float\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateFloat;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"boolean\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateBoolean;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type === \"money(yuan)\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateMoney;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n }\r\n\r\n for (let k in formRules) {\r\n let fieldNameRule = {};\r\n let trigger = \"blur\";\r\n let message = \"\";\r\n let type = \"\";\r\n if (formRules[k].type === \"required\") {\r\n if (!this.isEmpty(formField[\"formItem\"])) {\r\n formField[\"formItem\"].required = true;\r\n }\r\n fieldNameRule[\"required\"] = true;\r\n trigger = \"blur\";\r\n message = label + \"不能为空\";\r\n } else if (formRules[k].type === \"validator\") {\r\n if (formUtil.parentVmExist(this, formRules[k].validator)) {\r\n fieldNameRule[\"validator\"] = this.parentVm._self[\r\n formRules[k].validator\r\n ];\r\n }\r\n trigger = \"blur\";\r\n } else if (formRules[k].type === \"number\") {\r\n trigger = \"blur\";\r\n var ruleExpr = formRules[k].ruleExpr;\r\n fieldNameRule[\"validator\"] = (rule, value, callback) => {\r\n console.log(ruleExpr);\r\n let formData = this.getFormValue();\r\n let expr = ruleExpr.replace(new RegExp(\"\\\\$\\\\{this\\\\}\", \"gm\"), value);\r\n for (let fieldName in formData) {\r\n if (expr.indexOf(fieldName) == -1) {\r\n continue;\r\n }\r\n let fieldValue = formData[fieldName];\r\n if (fieldValue == \"\" || isNaN(fieldValue)) {\r\n fieldValue = 0;\r\n }\r\n expr = expr.replace(\r\n new RegExp(\"\\\\$\\\\{\" + fieldName + \"\\\\}\", \"gm\"),\r\n fieldValue\r\n );\r\n }\r\n console.log(expr);\r\n let validFlag = eval(expr);\r\n if (validFlag) {\r\n callback();\r\n } else {\r\n callback(new Error(rule.message));\r\n }\r\n };\r\n } else if (formRules[k].type === \"date\") {\r\n trigger = \"blur\";\r\n // fieldNameRule[\"validator\"] = formUtil.validateDate;\r\n var ruleDateExpr = formRules[k].ruleExpr;\r\n var resDate = (fieldName, value) => {\r\n let formItem = this.option.formItem;\r\n for (let i in formItem) {\r\n let item = formItem[i];\r\n if (\r\n item.fieldName == fieldName &&\r\n (item.fieldType == \"date\" ||\r\n item.fieldType == \"time\" ||\r\n item.fieldType == \"datetime\")\r\n ) {\r\n let format = item.dateFormat.format;\r\n let valueFormat = item.dateFormat.valueFormat;\r\n let date = formUtil.formatDate(value, valueFormat);\r\n if (date instanceof Date && !isNaN(date.getTime())) {\r\n return date.getTime();\r\n } else {\r\n return value;\r\n }\r\n }\r\n }\r\n };\r\n fieldNameRule[\"validator\"] = (rule, value, callback) => {\r\n console.log(ruleDateExpr);\r\n let formData = this.getFormValue();\r\n value = resDate(arguments[0], value);\r\n let expr = ruleDateExpr.replace(\r\n new RegExp(\"\\\\$\\\\{this\\\\}\", \"gm\"),\r\n value\r\n );\r\n for (let fieldName in formData) {\r\n if (expr.indexOf(fieldName) == -1) {\r\n continue;\r\n }\r\n\r\n let fieldValue = formData[fieldName];\r\n fieldValue = resDate(fieldName, fieldValue);\r\n expr = expr.replace(\r\n new RegExp(\"\\\\$\\\\{\" + fieldName + \"\\\\}\", \"gm\"),\r\n fieldValue\r\n );\r\n }\r\n try {\r\n console.log(expr);\r\n let validFlag = eval(expr);\r\n if (validFlag) {\r\n callback();\r\n } else {\r\n callback(new Error(rule.message));\r\n }\r\n } catch (error) {}\r\n };\r\n } else if (formRules[k].type === \"email\") {\r\n trigger = \"blur\";\r\n message = label + \"格式不正确\";\r\n type = \"email\";\r\n } else if (formRules[k].type === \"phone\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的手机号码\";\r\n fieldNameRule[\"pattern\"] = /^1[123456789]\\d{9}$/;\r\n } else if (formRules[k].type === \"mobile\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的电话\";\r\n fieldNameRule[\"pattern\"] = /^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$/;\r\n } else if (formRules[k].type === \"idNo\") {\r\n trigger = \"blur\";\r\n fieldNameRule[\"validator\"] = formUtil.validateIdNo;\r\n } else {\r\n //continue\r\n }\r\n\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n type = \"array\";\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].min) && !this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message =\r\n label +\r\n \"长度必须大于等于\" +\r\n formRules[k].min +\r\n \"并且小于等于\" +\r\n formRules[k].max;\r\n } else if (!this.isEmpty(formRules[k].min)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n message = label + \"长度必须大于等于\" + formRules[k].min;\r\n } else if (!this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message = label + \"长度必须小于等于\" + formRules[k].max;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].message)) {\r\n message = formRules[k].message;\r\n }\r\n fieldNameRule[\"message\"] = message;\r\n\r\n if (!this.isEmpty(type)) {\r\n fieldNameRule[\"type\"] = type;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].trigger)) {\r\n trigger = formRules[k].trigger;\r\n }\r\n fieldNameRule[\"trigger\"] = trigger;\r\n\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n this.$set(this.rules, formField.fieldName, fieldNameRules);\r\n } catch (error) {\r\n console.error(\"规则解析错误:\" + error);\r\n this.$set(this.rules, formField.fieldName, []);\r\n }\r\n } else {\r\n formField[arguments[1]] = arguments[2];\r\n }\r\n }\r\n }\r\n },\r\n async initForm(callback) {\r\n let _this = this;\r\n _this.option = {};\r\n _this.formData = {};\r\n _this.events = {};\r\n _this.pramDicItem = {};\r\n _this.rules = {};\r\n _this.state = {};\r\n if (_this.formId) {\r\n try {\r\n let jsonData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/form/\" + _this.formId + \".json\"\r\n );\r\n if (jsonData) {\r\n _this.option = JSON.parse(JSON.stringify(_this.doBeforeForm(jsonData.data)));\r\n } else {\r\n _this.option = JSON.parse(\r\n JSON.stringify(_this.doBeforeForm(_this.$busDatas[_this.formId]))\r\n );\r\n }\r\n } catch (error) {\r\n if (_this.initData === undefined) {\r\n _this.$message.error(\r\n \"未找到 [ \" + _this.formId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n }\r\n }\r\n if (_this.initData !== undefined) {\r\n _this.initData = this.doBeforeForm(_this.initData);\r\n _this.option = Object.assign(_this.option, _this.initData);\r\n }\r\n\r\n //处理隐藏域\r\n this.hiddenItem = this.option.formItem.filter((item) => {\r\n if (item.state && item.state.length > 0) {\r\n for (let sts of item.state) {\r\n if (sts.isShow !== false) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else if (item.isShow === false) {\r\n return true;\r\n }\r\n });\r\n\r\n _this.temp2 = new Object(); // 用于过滤排序的对象\r\n\r\n let formItem = _this.option.formItem;\r\n let dicKeyArray = [];\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let item = formItems[i];\r\n if (item.fieldType === \"label\" || item.fieldType === \"empty\") {\r\n continue;\r\n }\r\n //处理状态\r\n let state = item.state;\r\n let use = item.useState;\r\n if (state && use) {\r\n for (let sts of state) {\r\n if (sts.id == use) {\r\n //将激活的状态和基础数据合并\r\n item = Object.assign(item, sts);\r\n }\r\n //处理condition\r\n let condition = sts.condition;\r\n //处理条件,拿到具体的字段名称数组\r\n let key = Array.from(formUtil.doExpression(condition));\r\n //遍历字段名称,用于进行监听\r\n for (let name of key) {\r\n //都添加这个全局属性下\r\n if (_this.state[name]) {\r\n _this.state[name].push(Object.assign({}, item, sts));\r\n } else {\r\n _this.state[name] = [Object.assign({}, item, sts)];\r\n }\r\n }\r\n if (!item.isShow) {\r\n _this.temp2[`${item.rowIndex}-${item.colIndex}`] = item;\r\n }\r\n }\r\n }\r\n\r\n if (\r\n Array.isArray(item.value) &&\r\n (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\")\r\n ) {\r\n item.value = item.value.join(\"|\");\r\n }\r\n if (Array.isArray(item.value) && item.fieldType === \"cascader\") {\r\n if (item.multiple) {\r\n //多选\r\n item.value = item.value.join(\"|\");\r\n } else {\r\n //单选\r\n item.value = item.value.join(\",\");\r\n }\r\n }\r\n //解析字典项\r\n // let setFormValueFlag = true;\r\n let dicKey = item.dicKey;\r\n if (!_this.isEmpty(dicKey) && item.optionType !== \"1\") {\r\n // setFormValueFlag = true;\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = item.fieldName;\r\n dicKeyObject.value = item.value;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n _this.$set(_this.pramDicItem, item.fieldName, item.dicItem);\r\n }\r\n if (\r\n item.fieldType === \"dateGroup\" ||\r\n item.fieldType === \"datetimeGroup\" ||\r\n item.fieldType === \"timeGroup\"\r\n ) {\r\n let value = [\"\", \"\"];\r\n if (Array.isArray(item.value)) {\r\n for (let d = 0; d < item.value.length; d++) {\r\n value[d] = item.value[d];\r\n }\r\n }\r\n _this.setFormValue(item.fieldName, value[0]);\r\n _this.setFormValue(item.endFieldName, value[1]);\r\n } else {\r\n // if (setFormValueFlag) {\r\n _this.setFormValue(item.fieldName, item.value);\r\n // }\r\n }\r\n\r\n //解析事件\r\n _this.attr(item.fieldName, \"events\", item.events);\r\n\r\n //解析规则\r\n _this.attr(item.fieldName, \"rules\", item.rules);\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n // _this.setFormValue(dicKeyArray[k].fieldName, dicKeyArray[k].value, true);\r\n }\r\n _this.formFlag = true;\r\n });\r\n\r\n //watch 状态的监听\r\n let keys = Object.keys(_this.state); //获取所有的key\r\n\r\n for (let key of keys) {\r\n //取到每一条,用vue进行动态监听\r\n let item = _this.state[key];\r\n _this.$watch(`formData.${key}`, function (val, oldVal) {\r\n _this.$nextTick(() => {\r\n this.getMatch(item, val);\r\n });\r\n });\r\n }\r\n _this.clearValidate();\r\n _this.calcTable(); //初始化计算表格\r\n\r\n _this.$nextTick(() => {\r\n _this.$emit(\"initCallBack\", this.$refs[this.formId]);\r\n if (typeof callback === \"function\") {\r\n callback(this.$refs[this.formId]);\r\n }\r\n });\r\n },\r\n //进行匹配\r\n getMatch(arr, val) {\r\n let flag = false;\r\n //遍历进行多条件的匹配\r\n for (let item of arr) {\r\n let condition = item.condition;\r\n //获取条件的key\r\n let keys = formUtil.doExpression(condition);\r\n //转换条件\r\n for (let name of keys.values()) {\r\n //数字\r\n if (!isNaN(name)) {\r\n condition = condition.replaceAll(\"${\" + name + \"}\", this.formData[name]);\r\n }\r\n //boolean\r\n else if (\r\n name === true ||\r\n name === false ||\r\n name === \"true\" ||\r\n name === \"false\"\r\n ) {\r\n condition = condition.replaceAll(\"${\" + name + \"}\", this.formData[name]);\r\n }\r\n //string\r\n else {\r\n condition = condition.replaceAll(\r\n \"${\" + name + \"}\",\r\n `'${this.formData[name]}'`\r\n );\r\n }\r\n }\r\n // console.log('状态匹配 \\n初始条件 - %s \\n处理后条件 - %s', item.condition, condition);\r\n //判断条件触发不\r\n if (eval(condition)) {\r\n let uuid = item.uuid;\r\n //根据uuid找到组件\r\n let a = this.option.formItem;\r\n let one = this.option.formItem.find((i) => {\r\n if (i.uuid == uuid) {\r\n return true;\r\n } else {\r\n if (i.state) {\r\n for (let sts of i.state) {\r\n if (sts.uuid === uuid) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n });\r\n //存在进行处理\r\n if (one) {\r\n let b = item;\r\n //取到旧的数据\r\n let _old = Object.assign({}, this.tableData[one.rowIndex][one.colIndex]);\r\n //触发formdata变化, 进行表单的赋值\r\n this.$set(\r\n this.formData,\r\n item.fieldName,\r\n this.formData[item.fieldName] || item.value\r\n );\r\n //进行组件的替换\r\n this.tableData[one.rowIndex][one.colIndex] = item;\r\n if (!this.temp2) {\r\n this.temp2 = new Object();\r\n }\r\n //把这个变化组件 标记进行 temp2 , 初始化这个也用\r\n this.temp2[`${one.rowIndex}-${one.colIndex}`] = item;\r\n //判断涉及到组件显隐不 ,有就触发计算表格\r\n if (item.isShow === false || item.rowIndex !== _old.rowIndex) {\r\n flag = true;\r\n }\r\n } else {\r\n console.warn(`匹配状态 - fieldName: ${name} - 未找到`);\r\n }\r\n // console.log(\"tableData\", this.tableData);\r\n }\r\n }\r\n //计算表格\r\n flag && this.calcTable();\r\n },\r\n //计算表格\r\n calcTable() {\r\n //先确保上面的变化结束\r\n this.$nextTick(() => {\r\n let td = this.tableData;\r\n let len = td.length;\r\n let columns = this.option.columns;\r\n //重置上次变化\r\n if (this.temp) {\r\n let keys = Object.keys(this.temp);\r\n for (let key of keys) {\r\n let ri = key.split(\"-\")[0];\r\n let ci = key.split(\"-\")[1];\r\n td[ri][ci] = this.temp[key];\r\n }\r\n }\r\n this.temp = new Object(); //记录上一次的变化的\r\n //确保重置变化结束\r\n this.$nextTick(() => {\r\n //对每一列从底部向上进行递归计算,判断需要上移不\r\n for (let index = 0; index < columns; index++) {\r\n let col = td[len - 1][index];\r\n this.deep(col, len - 1, index, len - 1);\r\n }\r\n });\r\n // console.log(`temp `, this.temp);\r\n });\r\n },\r\n //递归计算每一个单元格\r\n deep(col, rowIndex, colIndex, len) {\r\n let td = this.tableData;\r\n //如果涉及到跨列的 ,就修改计算的触发点,将最后一行的定位计算到跨列这里\r\n if (col && (col.belong || col.colspan > 1)) {\r\n rowIndex >= 1 &&\r\n this.deep(td[rowIndex - 1][colIndex], rowIndex - 1, colIndex, rowIndex);\r\n return;\r\n }\r\n //如果当前格是隐藏的,就进行移动操作\r\n if (col && col.isShow === false) {\r\n //确保上一轮变化触发成功\r\n this.$nextTick(() => {\r\n //移单元格向上\r\n this.modCol(col, rowIndex, colIndex, len);\r\n });\r\n }\r\n rowIndex >= 1 && this.deep(td[rowIndex - 1][colIndex], rowIndex - 1, colIndex, len);\r\n },\r\n modCol(col, rowIndex, colIndex, len) {\r\n let td = this.tableData;\r\n //遍历当前向下的所有单元格往上一次\r\n for (let index = rowIndex; index <= len; index++) {\r\n //记录单元格变化\r\n this.recordCol(td[index][colIndex], index, colIndex);\r\n //最后一行置空\r\n if (index == len) {\r\n td[index][colIndex] = this.returnCol(\r\n {},\r\n { rowIndex: index, colIndex: colIndex }\r\n );\r\n continue;\r\n }\r\n //变化\r\n td[index][colIndex] = td[index + 1][colIndex];\r\n }\r\n },\r\n //记录变化的单元格,用于下次变化前的重置操作\r\n recordCol(col, rowIndex, colIndex) {\r\n let key = `${rowIndex}-${colIndex}`;\r\n if (this.temp2 && !this.temp2[key]) {\r\n this.temp[key] = this.temp[key] || Object.assign({}, col);\r\n }\r\n },\r\n rowStyleHandler(row) {\r\n let rowData = row.row;\r\n for (let cell in rowData) {\r\n let cellData = rowData[cell];\r\n if (cellData.fieldType != \"empty\") {\r\n return null;\r\n }\r\n }\r\n return { display: \"none\" };\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-form {\r\n width: 100%;\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n.mftcc-form .el-form-item__content,\r\n.mftcc-form-search .el-form-item__content {\r\n width: auto;\r\n}\r\n.mftcc-form .el-form-item,\r\n.mftcc-form-search .el-form-item {\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item,\r\n.mftcc-form-search .mftcc-form-group .el-form-item {\r\n padding: 0;\r\n}\r\n.mftcc-form .el-select,\r\n.mftcc-form-search .el-select {\r\n width: 100%;\r\n}\r\n.mftcc-form .form-el-row,\r\n.mftcc-form-search .form-el-row {\r\n width: 100%;\r\n}\r\n.mftcc-form .el-table td,\r\n.mftcc-form-search .el-table td,\r\n.mftcc-form-query .el-table td {\r\n border-bottom: none;\r\n padding: 0;\r\n height: 0;\r\n}\r\n\r\n.mftcc-form .el-table--border::after,\r\n.mftcc-form .el-table::before,\r\n.mftcc-form-search .el-table--border::after,\r\n.mftcc-form-search .el-table::before,\r\n.mftcc-form-query .el-table--border::after,\r\n.mftcc-form-query .el-table::before,\r\n.mftcc-form-expand .el-table--border::after,\r\n.mftcc-form-expand .el-table::before {\r\n content: none;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-form,\r\n.mftcc-form-search {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -ms-flex-wrap: wrap;\r\n flex-wrap: wrap;\r\n}\r\n.mftcc-form .el-form-item__content,\r\n.mftcc-form-search .el-form-item__content {\r\n width: auto;\r\n}\r\n.mftcc-form .el-form-item,\r\n.mftcc-form-search .el-form-item {\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item,\r\n.mftcc-form-search .mftcc-form-group .el-form-item {\r\n padding: 0;\r\n}\r\n.mftcc-form .el-select,\r\n.mftcc-form-search .el-select {\r\n width: 100%;\r\n}\r\n.mftcc-form .form-el-row,\r\n.mftcc-form-search .form-el-row {\r\n width: 100%;\r\n}\r\n","<template>\r\n <el-collapse v-model=\"activeNames\"\r\n class=\"mftcc-collapse\"\r\n @change=\"change\"\r\n >\r\n <el-collapse-item name=\"mftcc-collapse\"\r\n :class=\"{'isAutoHeight':props.isAutoHeight===true}\"\r\n :style=\"'height:'+props.height+'px;max-height:'+props.maxHeight+'px;'\">\r\n <div slot=\"title\" class=\"mftcc-collapse-title\">\r\n <i class=\"el-icon-star-on\"></i>\r\n <span>{{ props.title }}</span>\r\n <li style=\"cursor: pointer\" class=\"el-icon-edit-outline title\" @click.stop=\"editFormM\"></li>\r\n <!-- <i :class=\"corpBaseInfo\"></i> -->\r\n <i :class=\"arrowIcon\"></i>\r\n </div>\r\n <div class=\"mftcc-collapse-info\">\r\n <el-row v-if=\"props.preview===true||isPreview===true\" >\r\n <template v-if=\"props.importType=='form'\">\r\n <mftcc-form :formId=\"props.formId\" :parentVm=\"parentVm\" ref=\"form\" @initCallBack=\"initFormCallBack\"></mftcc-form>\r\n </template>\r\n <template v-else-if=\"props.importType=='table'\">\r\n <mftcc-table :tableId=\"props.tableId\" :parentVm=\"parentVm\" ref=\"table\" @initCallBack=\"initTableCallBack\"></mftcc-table>\r\n </template>\r\n <template v-else-if=\"props.importType=='bizComp'\">\r\n <container :props=\"props\"\r\n :paramData=\"paramData\">\r\n </container>\r\n </template>\r\n </el-row>\r\n </div>\r\n </el-collapse-item>\r\n </el-collapse>\r\n</template>\r\n<script>\r\n\r\nimport formUtil from '../../utils/formUtil'\r\nimport container from \"../layout/plugins/container\";\r\nexport default {\r\n data() {\r\n return {\r\n activeNames:[],\r\n arrowIcon:\"el-icon-arrow-down\"\r\n }\r\n },\r\n props: {\r\n props: {\r\n type: Object,\r\n default() {\r\n return {};\r\n }\r\n },\r\n parentVm:{\r\n type: Object,\r\n required: true\r\n },\r\n isPreview:Boolean,\r\n paramData:{\r\n type: Object,\r\n default: function() {\r\n return {};\r\n }\r\n }\r\n },\r\n components:{\r\n container\r\n },\r\n created() {\r\n if(this.props.isOpen===true){\r\n this.activeNames = [\"mftcc-collapse\"];\r\n }else{\r\n this.activeNames = [];\r\n }\r\n this.change(this.activeNames);\r\n this.initTableSearchData();\r\n },\r\n methods: {\r\n initTableSearchData(){\r\n this.initSearchData = {};\r\n let isd = this.props.initSearchData;\r\n for(let sd of isd){\r\n let value;\r\n if(sd.value.startsWith(\"${\")&&sd.value.endsWith(\"}\")){\r\n value = sd.value.substring(2,sd.value.length-1);\r\n if(this.paramData[value]){\r\n value = this.paramData[value];\r\n }else{\r\n console.error(\"变量 \"+value+\" 不存在\");\r\n value = \"\";\r\n }\r\n }else{\r\n value = sd.value;\r\n }\r\n this.initSearchData[sd.key] = value;\r\n }\r\n },\r\n change(activeNames){\r\n if(activeNames.length==0){\r\n this.arrowIcon = \"el-icon-arrow-up\";\r\n }else{\r\n this.arrowIcon = \"el-icon-arrow-down\";\r\n }\r\n },\r\n initFormCallBack(){\r\n this.$nextTick(() => {\r\n if (this.props.formInitMethod&&formUtil.parentVmExist(this.parentVm, this.props.formInitMethod)) {\r\n this.parentVm._self[this.props.formInitMethod](this.$refs.form);\r\n }\r\n });\r\n },\r\n initTableCallBack(){\r\n this.$nextTick(() => {\r\n if (this.props.tableInitMethod&&formUtil.parentVmExist(this.parentVm, this.props.tableInitMethod)) {\r\n this.parentVm._self[this.props.tableInitMethod](this.$refs.table);\r\n }\r\n });\r\n },\r\n editFormM(){\r\n this.$nextTick(() => {\r\n if (formUtil.parentVmExist(this.parentVm, \"editFormM\")) {\r\n this.parentVm._self[\"editFormM\"](this.$refs.form);\r\n }\r\n });\r\n }\r\n },\r\n}\r\n</script>\r\n<style>\r\n.mftcc-collapse>.el-collapse-item{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-collapse>.el-collapse-item>.el-collapse-item__wrap{\r\n flex-grow: 1;\r\n}\r\n.isAutoHeight{\r\n height: unset !important;\r\n min-height: unset !important;\r\n max-height: unset !important;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-collapse>.el-collapse-item{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.mftcc-collapse>.el-collapse-item>.el-collapse-item__wrap{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n}\r\n.isAutoHeight{\r\n height: unset !important;\r\n min-height: unset !important;\r\n max-height: unset !important;\r\n}\r\n","<template>\r\n <el-card\r\n shadow=\"never\"\r\n :class=\"{ 'mftcc-card': true, isAutoHeight: props.isAutoHeight === true }\"\r\n :style=\"\r\n 'height:' +\r\n props.height +\r\n 'px;min-height:' +\r\n props.minHeight +\r\n 'px;max-height:' +\r\n props.maxHeight +\r\n 'px;'\r\n \"\r\n >\r\n <!-- <el-row> \r\n <el-link :underline=\"false\">{{ props.title }}</el-link>\r\n </el-row> -->\r\n <el-row v-if=\"props.preview === true || isPreview === true\" style=\"overflow: hidden\">\r\n <template v-if=\"props.importType == 'form'\">\r\n <mftcc-form\r\n :formId=\"props.formId\"\r\n :parentVm=\"parentVm\"\r\n ref=\"form\"\r\n @initCallBack=\"initFormCallBack\"\r\n ></mftcc-form>\r\n </template>\r\n <template v-else-if=\"props.importType == 'table'\">\r\n <mftcc-table\r\n :tableId=\"props.tableId\"\r\n :initSearchData=\"initSearchData\"\r\n :parentVm=\"parentVm\"\r\n ref=\"table\"\r\n @initCallBack=\"initTableCallBack\"\r\n ></mftcc-table>\r\n </template>\r\n <template v-else-if=\"props.importType == 'bizComp'\">\r\n <container :props=\"props\" :paramData=\"paramData\"> </container>\r\n </template>\r\n </el-row>\r\n </el-card>\r\n</template>\r\n<script>\r\nimport formUtil from \"../../utils/formUtil\";\r\nimport container from \"../layout/plugins/container\";\r\nexport default {\r\n data() {\r\n return {\r\n initSearchData: {},\r\n };\r\n },\r\n props: {\r\n props: {\r\n type: Object,\r\n default() {\r\n return {};\r\n },\r\n },\r\n parentVm: {\r\n type: Object,\r\n required: true,\r\n },\r\n isPreview: Boolean,\r\n paramData: {\r\n type: Object,\r\n default: function () {\r\n return {};\r\n },\r\n },\r\n },\r\n components: {\r\n container,\r\n },\r\n created() {\r\n this.initTableSearchData();\r\n },\r\n methods: {\r\n initTableSearchData() {\r\n this.initSearchData = {};\r\n let isd = this.props.initSearchData;\r\n for (let sd of isd) {\r\n let value;\r\n if (sd.value.startsWith(\"${\") && sd.value.endsWith(\"}\")) {\r\n value = sd.value.substring(2, sd.value.length - 1);\r\n if (typeof this.paramData[value] == \"undefined\") {\r\n value = this.paramData[value];\r\n } else {\r\n console.error(\"变量 \" + value + \" 不存在\");\r\n value = \"\";\r\n }\r\n } else {\r\n value = sd.value;\r\n }\r\n this.initSearchData[sd.key] = value;\r\n }\r\n },\r\n initFormCallBack() {\r\n this.$nextTick(() => {\r\n if (\r\n this.props.formInitMethod &&\r\n formUtil.parentVmExist(this.parentVm, this.props.formInitMethod)\r\n ) {\r\n this.parentVm._self[this.props.formInitMethod](this.$refs.form);\r\n }\r\n });\r\n },\r\n initTableCallBack() {\r\n this.$nextTick(() => {\r\n if (\r\n this.props.tableInitMethod &&\r\n formUtil.parentVmExist(this.parentVm, this.props.tableInitMethod)\r\n ) {\r\n this.parentVm._self[this.props.tableInitMethod](this.$refs.table);\r\n }\r\n });\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-card {\r\n}\r\n\r\n.isAutoHeight {\r\n height: unset !important;\r\n min-height: unset !important;\r\n max-height: unset !important;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-card {\r\n}\r\n\r\n.isAutoHeight {\r\n height: unset !important;\r\n min-height: unset !important;\r\n max-height: unset !important;\r\n}\r\n","<template>\r\n <el-form\r\n :label-position=\"option.labelPosition\"\r\n :model=\"formData\"\r\n :rules=\"rules\"\r\n :ref=\"option.formId\"\r\n :disabled=\"isEmpty(option.formDisabled) ? false : option.formDisabled\"\r\n label-width=\"150px\"\r\n :class=\"\r\n search === 'search'\r\n ? 'mftcc-form-search'\r\n : option.query === 'query'\r\n ? 'mftcc-form-query'\r\n : 'mftcc-form'\r\n \"\r\n @submit.native.prevent\r\n >\r\n <el-row class=\"form-el-row\">\r\n <template v-for=\"(item, index) in option.formItem\">\r\n <template v-if=\"item.fieldType === 'label'\">\r\n <el-col :span=\"24\" :key=\"index\">\r\n <el-alert\r\n :title=\"item.label\"\r\n type=\"success\"\r\n effect=\"dark\"\r\n :closable=\"false\"\r\n style=\"margin-bottom: 22px\"\r\n >\r\n </el-alert>\r\n </el-col>\r\n </template>\r\n <template v-else>\r\n <el-col\r\n :span=\"\r\n isEmpty(option.columns)\r\n ? 24\r\n : Math.floor(24 / option.columns) *\r\n Math.floor(\r\n isEmpty(item.colspan)\r\n ? 1\r\n : item.colspan > option.columns\r\n ? option.columns\r\n : item.colspan\r\n )\r\n \"\r\n :key=\"item.fieldName\"\r\n >\r\n <template v-if=\"item.fieldType === 'group'\">\r\n <el-form-item\r\n :label=\"item.label\"\r\n :required=\"item.required\"\r\n v-show=\"isEmpty(item.isShow) ? true : item.isShow\"\r\n class=\"mftcc-form-group\"\r\n >\r\n <template v-for=\"(grouItem, groupIndex) in item.group\">\r\n <el-col\r\n :key=\"grouItem.fieldName + 'field'\"\r\n :span=\"\r\n Math.floor((24 - (item.group.length - 1) * 2) / item.group.length)\r\n \"\r\n v-show=\"isEmpty(grouItem.isShow) ? true : grouItem.isShow\"\r\n >\r\n <el-form-item :prop=\"grouItem.fieldName\">\r\n <template v-if=\"option.query === 'query'\">\r\n <span :title=\"formData[grouItem.fieldName]\">\r\n <template v-if=\"!isEmpty(grouItem.prepend)\">\r\n {{ grouItem.prepend }}\r\n </template>\r\n {{ formData[grouItem.fieldName] }}\r\n <template v-if=\"!isEmpty(grouItem.suffix)\">\r\n {{ grouItem.suffix }}\r\n </template>\r\n </span>\r\n </template>\r\n <template v-else-if=\"grouItem.fieldType === 'text'\">\r\n <template v-if=\"grouItem.dataType === 'money(yuan)'\">\r\n <el-input\r\n :ref=\"grouItem.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[grouItem.fieldName]\"\r\n :placeholder=\"\r\n isEmpty(grouItem.placeholder) ? '' : grouItem.placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(grouItem.disabled) ? false : grouItem.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(grouItem.readOnly) ? false : grouItem.readOnly\r\n \"\r\n v-on=\"events[grouItem.fieldName]\"\r\n @blur=\"blurFunc(grouItem.dataType, $event)\"\r\n @keyup.native=\"toMoney\"\r\n @click.native=\"clickFunc(grouItem, $event)\"\r\n :maxlength=\"grouItem.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(grouItem['show-word-limit'])\r\n ? false\r\n : grouItem['show-word-limit']\r\n \"\r\n >\r\n <!-- <template slot=\"append\">元</template> -->\r\n <template slot=\"suffix\">元</template>\r\n <template v-if=\"!isEmpty(grouItem.prepend)\">\r\n <template slot=\"prepend\">{{ grouItem.prepend }}</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"grouItem.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[grouItem.fieldName]\"\r\n :placeholder=\"\r\n isEmpty(grouItem.placeholder) ? '' : grouItem.placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(grouItem.disabled) ? false : grouItem.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(grouItem.readOnly) ? false : grouItem.readOnly\r\n \"\r\n v-on=\"events[grouItem.fieldName]\"\r\n @blur=\"blurFunc(grouItem.dataType, $event)\"\r\n @click.native=\"clickFunc(grouItem, $event)\"\r\n :maxlength=\"grouItem.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(grouItem['show-word-limit'])\r\n ? false\r\n : grouItem['show-word-limit']\r\n \"\r\n >\r\n <template v-if=\"!isEmpty(grouItem.prepend)\">\r\n <template slot=\"prepend\">{{ grouItem.prepend }}</template>\r\n </template>\r\n <template v-if=\"grouItem.dataType === 'money(jiao)'\">\r\n <template slot=\"suffix\">角</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'money(fen)'\">\r\n <template slot=\"suffix\">分</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'money(wan)'\">\r\n <template slot=\"suffix\">万元</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'money(yi)'\">\r\n <template slot=\"suffix\">亿元</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'percentile'\">\r\n <template slot=\"suffix\">%</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'thousand'\">\r\n <template slot=\"suffix\">‰</template>\r\n </template>\r\n <template v-else-if=\"grouItem.dataType === 'tenThousand'\">\r\n <template slot=\"suffix\">‱</template>\r\n </template>\r\n <template v-else-if=\"!isEmpty(grouItem.suffix)\">\r\n <template slot=\"suffix\">{{ grouItem.suffix }}</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n </template>\r\n <template v-else-if=\"grouItem.fieldType === 'number'\">\r\n <el-input\r\n :ref=\"grouItem.fieldName\"\r\n type=\"number\"\r\n v-model.number=\"formData[grouItem.fieldName]\"\r\n :placeholder=\"\r\n isEmpty(grouItem.placeholder) ? '' : grouItem.placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(grouItem.disabled) ? false : grouItem.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(grouItem.readOnly) ? false : grouItem.readOnly\r\n \"\r\n v-on=\"events[grouItem.fieldName]\"\r\n @click.native=\"clickFunc(grouItem, $event)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"grouItem.fieldType === 'date'\">\r\n <el-date-picker\r\n :ref=\"grouItem.fieldName\"\r\n v-model=\"formData[grouItem.fieldName]\"\r\n :format=\"\r\n formData[grouItem.fieldName] ===\r\n dateFormat(\r\n new Date('9999/12/31'),\r\n isEmpty(grouItem.dateFormat.valueFormat)\r\n ? 'yyyyMMdd'\r\n : grouItem.dateFormat.valueFormat\r\n )\r\n ? '长期'\r\n : isEmpty(grouItem.dateFormat.format)\r\n ? 'yyyy-MM-dd'\r\n : grouItem.dateFormat.format\r\n \"\r\n :value-format=\"\r\n isEmpty(grouItem.dateFormat.valueFormat)\r\n ? 'yyyyMMdd'\r\n : grouItem.dateFormat.valueFormat\r\n \"\r\n type=\"date\"\r\n :placeholder=\"\r\n isEmpty(grouItem.placeholder) ? '' : grouItem.placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(grouItem.disabled) ? false : grouItem.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(grouItem.readOnly) ? false : grouItem.readOnly\r\n \"\r\n :picker-options=\"\r\n !isEmpty(grouItem.dateOption) &&\r\n grouItem.dateOption.isLong === true\r\n ? pickerOptions\r\n : {}\r\n \"\r\n v-on=\"events[grouItem.fieldName]\"\r\n @click.native=\"clickFunc(grouItem, $event)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n </el-form-item>\r\n </el-col>\r\n <template v-if=\"groupIndex !== item.group.length - 1\">\r\n <el-col\r\n :key=\"grouItem.fieldName + 'line'\"\r\n class=\"line\"\r\n :span=\"2\"\r\n style=\"text-align: center\"\r\n v-show=\"isEmpty(grouItem.isShow) ? true : grouItem.isShow\"\r\n >{{\r\n isEmpty(grouItem.separator) ? \"-\" : grouItem.separator\r\n }}</el-col\r\n >\r\n </template>\r\n </template>\r\n </el-form-item>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'empty'\">\r\n <el-form-item>\r\n <span slot=\"label\"> </span>\r\n </el-form-item>\r\n </template>\r\n <template v-else>\r\n <el-form-item\r\n :label=\"item.label\"\r\n :prop=\"item.fieldName\"\r\n v-show=\"isEmpty(item.isShow) ? true : item.isShow\"\r\n >\r\n <template v-if=\"option.query === 'query'\">\r\n <span :title=\"formData[item.fieldName]\">\r\n <template v-if=\"!isEmpty(item.prepend)\">\r\n {{ item.prepend }}\r\n </template>\r\n {{ formData[item.fieldName] }}\r\n <template v-if=\"!isEmpty(item.suffix)\">\r\n {{ item.suffix }}\r\n </template>\r\n </span>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'text'\">\r\n <template v-if=\"item.dataType === 'money(yuan)'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @keyup.native=\"toMoney\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit']) ? false : item['show-word-limit']\r\n \"\r\n >\r\n <!-- <template slot=\"append\">元</template> -->\r\n <template slot=\"suffix\">元</template>\r\n <template v-if=\"!isEmpty(item.prepend)\">\r\n <template slot=\"prepend\">{{ item.prepend }}</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit']) ? false : item['show-word-limit']\r\n \"\r\n >\r\n <template v-if=\"!isEmpty(item.prepend)\">\r\n <template slot=\"prepend\">{{ item.prepend }}</template>\r\n </template>\r\n <template v-if=\"item.dataType === 'money(jiao)'\">\r\n <template slot=\"suffix\">角</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(fen)'\">\r\n <template slot=\"suffix\">分</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(wan)'\">\r\n <template slot=\"suffix\">万元</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(yi)'\">\r\n <template slot=\"suffix\">亿元</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'percentile'\">\r\n <template slot=\"suffix\">%</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'thousand'\">\r\n <template slot=\"suffix\">‰</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'tenThousand'\">\r\n <template slot=\"suffix\">‱</template>\r\n </template>\r\n <template v-else-if=\"!isEmpty(item.suffix)\">\r\n <template slot=\"suffix\">{{ item.suffix }}</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'password'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'checkbox'\">\r\n <el-checkbox-group\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n <el-checkbox\r\n v-for=\"boxItem in pramDicItem[item.fieldName]\"\r\n :key=\"boxItem.optCode\"\r\n :label=\"boxItem.optCode\"\r\n >\r\n {{ boxItem.optName }}</el-checkbox\r\n >\r\n </el-checkbox-group>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'select'\">\r\n <template v-if=\"item.dataType === 'library'\">\r\n <mftcc-library-select\r\n v-model=\"formData[item.fieldName]\"\r\n :url=\"item.library.url\"\r\n :realField=\"item.library.realField\"\r\n :showField=\"item.library.showField\"\r\n :multiple=\"false\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n v-on=\"events[item.fieldName]\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </mftcc-library-select>\r\n </template>\r\n <template v-else>\r\n <el-select\r\n autocomplete=\"off\"\r\n clearable\r\n filterable\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n <el-option\r\n v-for=\"selectItem in pramDicItem[item.fieldName]\"\r\n :key=\"selectItem.optCode\"\r\n :label=\"selectItem.optName\"\r\n :value=\"selectItem.optCode\"\r\n >\r\n </el-option>\r\n </el-select>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'multipleSelection'\">\r\n <template v-if=\"item.dataType === 'library'\">\r\n <mftcc-library-select\r\n v-model=\"formData[item.fieldName]\"\r\n :url=\"item.library.url\"\r\n :realField=\"item.library.realField\"\r\n :showField=\"item.library.showField\"\r\n :multiple=\"true\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n v-on=\"events[item.fieldName]\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </mftcc-library-select>\r\n </template>\r\n <template v-else>\r\n <el-select\r\n multiple\r\n autocomplete=\"off\"\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n <el-option\r\n v-for=\"selectItem in pramDicItem[item.fieldName]\"\r\n :key=\"selectItem.optCode\"\r\n :label=\"selectItem.optName\"\r\n :value=\"selectItem.optCode\"\r\n ></el-option>\r\n </el-select>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'radio'\">\r\n <el-radio-group\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n <el-radio\r\n v-for=\"radioItem in pramDicItem[item.fieldName]\"\r\n :key=\"radioItem.optCode\"\r\n :label=\"radioItem.optCode\"\r\n >\r\n {{ radioItem.optName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'switch'\">\r\n <el-switch\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :active-value=\"\r\n isEmpty(item.switchValue.activeValue)\r\n ? 0\r\n : item.switchValue.activeValue\r\n \"\r\n :inactive-value=\"\r\n isEmpty(item.switchValue.inActiveValue)\r\n ? 1\r\n : item.switchValue.inActiveValue\r\n \"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n ></el-switch>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'date'\">\r\n <el-date-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :format=\"\r\n formData[item.fieldName] ===\r\n dateFormat(\r\n new Date('9999/12/31'),\r\n isEmpty(item.dateFormat.valueFormat)\r\n ? 'yyyyMMdd'\r\n : item.dateFormat.valueFormat\r\n )\r\n ? '长期'\r\n : isEmpty(item.dateFormat.format)\r\n ? 'yyyy-MM-dd'\r\n : item.dateFormat.format\r\n \"\r\n :value-format=\"\r\n isEmpty(item.dateFormat.valueFormat)\r\n ? 'yyyyMMdd'\r\n : item.dateFormat.valueFormat\r\n \"\r\n type=\"date\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n :picker-options=\"\r\n !isEmpty(item.dateOption) && item.dateOption.isLong === true\r\n ? pickerOptions\r\n : {}\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'time'\">\r\n <el-time-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :format=\"\r\n isEmpty(item.dateFormat.format)\r\n ? 'HH:mm:ss'\r\n : item.dateFormat.format\r\n \"\r\n :value-format=\"\r\n isEmpty(item.dateFormat.valueFormat)\r\n ? 'HH:mm:ss'\r\n : item.dateFormat.valueFormat\r\n \"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n :picker-options=\"isEmpty(item.dateOption) ? {} : item.dateOption\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-time-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'datetime'\">\r\n <el-date-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :format=\"\r\n isEmpty(item.dateFormat.format)\r\n ? 'yyyy-MM-dd HH:mm:ss'\r\n : item.dateFormat.format\r\n \"\r\n :value-format=\"\r\n isEmpty(item.dateFormat.valueFormat)\r\n ? 'yyyyMMdd HH:mm:ss'\r\n : item.dateFormat.valueFormat\r\n \"\r\n type=\"datetime\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'number'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"number\"\r\n v-model.number=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'textarea'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"textarea\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit']) ? true : item['show-word-limit']\r\n \"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName]\"\r\n :placeholder=\"isEmpty(item.placeholder) ? '' : item.placeholder\"\r\n :disabled=\"isEmpty(item.disabled) ? false : item.disabled\"\r\n :readonly=\"isEmpty(item.readOnly) ? false : item.readOnly\"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event)\"\r\n ></el-input>\r\n </template>\r\n </el-form-item>\r\n </template>\r\n </el-col>\r\n </template>\r\n </template>\r\n </el-row>\r\n </el-form>\r\n</template>\r\n<script>\r\nimport { get, postJson, putJson } from \"../axios\";\r\nimport formUtil from \"../utils/formUtil\";\r\nexport default {\r\n props: [\"formId\", \"parentVm\", \"initData\", \"search\"],\r\n data() {\r\n return {\r\n option: {},\r\n formData: {},\r\n events: {},\r\n pramDicItem: {},\r\n rules: {},\r\n isEmpty: formUtil.isEmpty,\r\n toMoney: formUtil.toMoney,\r\n dateFormat: formUtil.dateFormat,\r\n pickerOptions: {\r\n shortcuts: [\r\n {\r\n text: \"今天\",\r\n onClick(picker) {\r\n picker.$emit(\"pick\", new Date());\r\n },\r\n },\r\n {\r\n text: \"长期\",\r\n onClick(picker) {\r\n picker.$emit(\"pick\", new Date(\"9999/12/31\"));\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n },\r\n watch: {\r\n formId: {\r\n handler(val, oldVal) {\r\n this.initForm();\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n initData() {\r\n this.initForm();\r\n },\r\n },\r\n methods: {\r\n resetForm(callback) {\r\n this.$refs[this.option.formId].resetFields();\r\n if (formUtil.isFunction(callback)) {\r\n callback();\r\n }\r\n },\r\n blurFunc(dataType, el) {\r\n formUtil.func_uior_valTypeImm(el, dataType);\r\n },\r\n clickFunc(item, el) {\r\n let events = item.events;\r\n for (let i in events) {\r\n if (\r\n this.option.formDisabled !== true &&\r\n item.disabled !== true &&\r\n events[i].type === \"click\" &&\r\n formUtil.parentVmExist(this, events[i].callback)\r\n ) {\r\n this.parentVm._self[events[i].callback](el);\r\n }\r\n }\r\n },\r\n validateForm(callback) {\r\n this.$refs[this.option.formId].validate((valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n validateField(parm, callback) {\r\n this.$refs[this.option.formId].validateField(parm, (valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n clearValidate() {\r\n this.$nextTick(() => {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.formId].clearValidate();\r\n } else if (arguments.length >= 1) {\r\n this.$refs[this.option.formId].clearValidate(arguments[1]);\r\n }\r\n });\r\n },\r\n getFormItems(formItem) {\r\n let formItems = [];\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n formItems.push(groupItem[j]);\r\n }\r\n } else {\r\n formItems.push(formItem[i]);\r\n }\r\n }\r\n return formItems;\r\n },\r\n setFormValue() {\r\n let formItem = this.option.formItem;\r\n if (arguments.length === 1) {\r\n for (let i in arguments[0]) {\r\n this.setFormValue(i, arguments[0][i]);\r\n }\r\n } else if (arguments.length >= 2) {\r\n if (this.formData.hasOwnProperty(arguments[0]) || arguments[2] === true) {\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let formField = formItems[i];\r\n if (formField !== null && arguments[0] === formField.fieldName) {\r\n let value = arguments[1];\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n let checkValue = [];\r\n if (!this.isEmpty(value)) {\r\n let checkArray = value.split(\"|\");\r\n for (let k in checkArray) {\r\n if (!this.isEmpty(checkArray[k])) {\r\n checkValue.push(checkArray[k]);\r\n }\r\n }\r\n }\r\n value = checkValue;\r\n } else if (formField.fieldType === \"text\") {\r\n if (formField.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(value);\r\n } else if (formField.dataType === \"money(wan)\") {\r\n value = formUtil.numDiv(value, 10000);\r\n } else if (formField.dataType === \"money(baiwan)\") {\r\n value = formUtil.numDiv(value, 1000000);\r\n } else if (formField.dataType === \"money(yi)\") {\r\n value = formUtil.numDiv(value, 100000000);\r\n } else if (formField.dataType === \"percentile\") {\r\n value = formUtil.numMulti(value, 100);\r\n } else if (formField.dataType === \"thousand\") {\r\n value = formUtil.numMulti(value, 1000);\r\n } else if (formField.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(value, 10000);\r\n }\r\n }\r\n if (this.option.query === \"query\") {\r\n let parmArray = this.pramDicItem[formField.fieldName];\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n let checkBoxValue = \"\";\r\n for (let h in value) {\r\n if (!this.isEmpty(value[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (formField.fieldType === \"switch\") {\r\n if (formField.switchValue.activeValue === value) {\r\n value = \"是\";\r\n } else {\r\n value = \"否\";\r\n }\r\n } else if (formField.fieldType === \"date\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd\";\r\n let format = \"yyyy-MM-dd\";\r\n if (!this.isEmpty(formField.dateFormat)) {\r\n if (!this.isEmpty(formField.dateFormat.valueFormat)) {\r\n valueFormat = formField.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(formField.dateFormat.format)) {\r\n format = formField.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(\r\n formUtil.formatDate(value, valueFormat),\r\n format\r\n );\r\n } catch (error) {\r\n console.error(formField.fieldName + \"日期数据解析错误\");\r\n }\r\n } else if (formField.fieldType === \"datetime\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n let format = \"yyyy-MM-dd HH:mm:ss\";\r\n if (!this.isEmpty(formField.dateFormat)) {\r\n if (!this.isEmpty(formField.dateFormat.valueFormat)) {\r\n valueFormat = formField.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(formField.dateFormat.format)) {\r\n format = formField.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(\r\n formUtil.formatDate(value, valueFormat),\r\n format\r\n );\r\n } catch (error) {\r\n console.error(formField.fieldName + \"日期数据解析错误\");\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === value) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n }\r\n if (\r\n this.option.formDisabled === true &&\r\n !this.isEmpty(formField.formatter) &&\r\n formUtil.parentVmExist(this, formField.formatter)\r\n ) {\r\n value = this.parentVm._self[formField.formatter](value);\r\n }\r\n this.$set(this.formData, arguments[0], value);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n getFormValue() {\r\n let formItem = this.option.formItem;\r\n let data = JSON.parse(JSON.stringify(this.formData)); //深度copy\r\n if (arguments.length === 0) {\r\n for (let j in data) {\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n let formField = formItems[i];\r\n if (formField !== null && j === formField.fieldName) {\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n data[j] = data[j].join(\"|\");\r\n } else if (formField.fieldType === \"text\") {\r\n let formTextValue = data[j];\r\n if (formField.dataType === \"money(yuan)\") {\r\n formTextValue = formUtil.delcommafy(formTextValue);\r\n } else if (formField.dataType === \"money(wan)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 10000);\r\n } else if (formField.dataType === \"money(baiwan)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 1000000);\r\n } else if (formField.dataType === \"money(yi)\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 100000000);\r\n } else if (formField.dataType === \"percentile\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 100);\r\n } else if (formField.dataType === \"thousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 1000);\r\n } else if (formField.dataType === \"tenThousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 10000);\r\n }\r\n data[j] = formTextValue;\r\n }\r\n }\r\n }\r\n }\r\n return data;\r\n } else if (arguments.length >= 1) {\r\n let result = this.getFormValue();\r\n if (!this.isEmpty(result)) {\r\n result = result[arguments[0]];\r\n }\r\n return result;\r\n }\r\n },\r\n attr() {\r\n let formItem = this.option.formItem;\r\n if (arguments.length === 2) {\r\n let formField = null;\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n if (arguments[0] === groupItem[j].fieldName) {\r\n formField = groupItem[j];\r\n }\r\n }\r\n } else {\r\n if (arguments[0] === formItem[i].fieldName) {\r\n formField = formItem[i];\r\n }\r\n }\r\n }\r\n let value = \"\";\r\n if (formField !== null) {\r\n if (arguments[1] === \"dicItem\") {\r\n value = this.pramDicItem[arguments[0]];\r\n } else if (arguments[1] === \"events\") {\r\n value = this.events[arguments[0]];\r\n } else if (arguments[1] === \"rules\") {\r\n value = this.rules[arguments[0]];\r\n } else {\r\n value = formField[arguments[1]];\r\n }\r\n }\r\n return value;\r\n } else if (arguments.length >= 3) {\r\n let formField = null;\r\n for (let i in formItem) {\r\n if (formItem[i].fieldType === \"group\") {\r\n let groupItem = formItem[i].group;\r\n for (let j in groupItem) {\r\n if (arguments[0] === groupItem[j].fieldName) {\r\n formField = groupItem[j];\r\n formField[\"formItem\"] = formItem[i];\r\n formField[\"label\"] = formItem[i].label;\r\n }\r\n }\r\n } else {\r\n if (arguments[0] === formItem[i].fieldName) {\r\n formField = formItem[i];\r\n }\r\n }\r\n }\r\n if (formField !== null) {\r\n if (arguments[1] === \"dicItem\") {\r\n this.$set(this.pramDicItem, arguments[0], arguments[2]);\r\n } else if (arguments[1] === \"events\") {\r\n //解析事件\r\n try {\r\n let eventsArray = arguments[2];\r\n let event = {};\r\n for (let evetIndex in eventsArray) {\r\n if (\r\n !this.isEmpty(eventsArray[evetIndex].type) &&\r\n eventsArray[evetIndex].type !== \"click\" &&\r\n formUtil.parentVmExist(this, eventsArray[evetIndex].callback)\r\n ) {\r\n event[eventsArray[evetIndex].type] = this.parentVm._self[\r\n eventsArray[evetIndex].callback\r\n ];\r\n }\r\n }\r\n this.$set(this.events, formField.fieldName, event);\r\n } catch (error) {\r\n console.error(\"事件解析错误:\" + error);\r\n this.$set(this.events, formField.fieldName, {});\r\n }\r\n } else if (arguments[1] === \"rules\") {\r\n //解析规则\r\n try {\r\n //解析规则\r\n let formRules = arguments[2];\r\n let fieldNameRules = [];\r\n if (formField.fieldType === \"text\") {\r\n let type = formField.dataType;\r\n if (type === \"int\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateInt;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"long\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateLong;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (\r\n type == \"double(2)\" ||\r\n type == \"double(4)\" ||\r\n type == \"double(6)\" ||\r\n type == \"money(fen)\" ||\r\n type == \"money(jiao)\" ||\r\n type == \"money(wan)\" ||\r\n type == \"money(yi)\" ||\r\n type == \"percentile\" ||\r\n type === \"thousand\" ||\r\n type == \"tenThousand\"\r\n ) {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateNumber;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"float\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateFloat;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"boolean\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateBoolean;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type === \"money(yuan)\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateMoney;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n }\r\n\r\n for (let k in formRules) {\r\n let fieldNameRule = {};\r\n let trigger = \"blur\";\r\n let message = \"\";\r\n let type = \"\";\r\n if (formRules[k].type === \"required\") {\r\n if (!this.isEmpty(formField[\"formItem\"])) {\r\n formField[\"formItem\"].required = true;\r\n }\r\n fieldNameRule[\"required\"] = true;\r\n trigger = \"blur\";\r\n message = formField.label + \"不能为空\";\r\n } else if (formRules[k].type === \"validator\") {\r\n if (formUtil.parentVmExist(this, formRules[k].validator)) {\r\n fieldNameRule[\"validator\"] = this.parentVm._self[\r\n formRules[k].validator\r\n ];\r\n }\r\n trigger = \"blur\";\r\n } else if (formRules[k].type === \"number\") {\r\n trigger = \"blur\";\r\n message = formField.label + \"必须为数字\";\r\n type = \"number\";\r\n } else if (formRules[k].type === \"email\") {\r\n trigger = \"blur\";\r\n message = formField.label + \"格式不正确\";\r\n type = \"email\";\r\n } else if (formRules[k].type === \"phone\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的手机号码\";\r\n fieldNameRule[\"pattern\"] = /^1[123456789]\\d{9}$/;\r\n } else if (formRules[k].type === \"mobile\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的电话\";\r\n fieldNameRule[\"pattern\"] = /^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$/;\r\n } else if (formRules[k].type === \"idNo\") {\r\n trigger = \"blur\";\r\n fieldNameRule[\"validator\"] = formUtil.validateIdNo;\r\n } else {\r\n //continue\r\n }\r\n\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n type = \"array\";\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].min) && !this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message =\r\n formField.label +\r\n \"长度必须大于等于\" +\r\n formRules[k].min +\r\n \"并且小于等于\" +\r\n formRules[k].max;\r\n } else if (!this.isEmpty(formRules[k].min)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n message = formField.label + \"长度必须大于等于\" + formRules[k].min;\r\n } else if (!this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message = formField.label + \"长度必须小于等于\" + formRules[k].max;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].message)) {\r\n message = formRules[k].message;\r\n }\r\n fieldNameRule[\"message\"] = message;\r\n\r\n if (!this.isEmpty(type)) {\r\n fieldNameRule[\"type\"] = type;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].trigger)) {\r\n trigger = formRules[k].trigger;\r\n }\r\n fieldNameRule[\"trigger\"] = trigger;\r\n\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n this.$set(this.rules, formField.fieldName, fieldNameRules);\r\n } catch (error) {\r\n console.error(\"规则解析错误:\" + error);\r\n this.$set(this.rules, formField.fieldName, []);\r\n }\r\n } else {\r\n formField[arguments[1]] = arguments[2];\r\n }\r\n }\r\n }\r\n },\r\n async initForm() {\r\n let _this = this;\r\n _this.option = {};\r\n _this.formData = {};\r\n _this.events = {};\r\n _this.pramDicItem = {};\r\n _this.rules = {};\r\n let formData;\r\n if (_this.formId) {\r\n try {\r\n let formData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/form/\" + this.formId + \".json\"\r\n );\r\n _this.option = JSON.parse(JSON.stringify(formData.data));\r\n } catch (error) {\r\n _this.$message.error(\r\n \"未找到 [ \" + _this.formId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n }\r\n if (_this.initData !== undefined) {\r\n _this.option = Object.assign(_this.option, _this.initData);\r\n }\r\n let formItem = _this.option.formItem;\r\n let dicKeyArray = [];\r\n let formItems = this.getFormItems(formItem);\r\n for (let i in formItems) {\r\n //解析字典项\r\n let dicKey = formItems[i].dicKey;\r\n if (!_this.isEmpty(dicKey) && formItems[i].optionType !== \"1\") {\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = formItems[i].fieldName;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n _this.$set(_this.pramDicItem, formItems[i].fieldName, formItems[i].dicItem);\r\n }\r\n\r\n if (\r\n Array.isArray(formItems[i].value) &&\r\n (formItems[i].fieldType === \"checkbox\" ||\r\n formItems[i].fieldType === \"multipleSelection\")\r\n ) {\r\n formItems[i].value = formItems[i].value.join(\"|\");\r\n }\r\n\r\n _this.setFormValue(formItems[i].fieldName, formItems[i].value, true);\r\n\r\n //解析事件\r\n _this.attr(formItems[i].fieldName, \"events\", formItems[i].events);\r\n\r\n //解析规则\r\n _this.attr(formItems[i].fieldName, \"rules\", formItems[i].rules);\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n }\r\n });\r\n\r\n _this.clearValidate();\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-form,\r\n.mftcc-form-search {\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n.mftcc-form .el-form-item__content,\r\n.mftcc-form-search .el-form-item__content {\r\n width: auto;\r\n}\r\n.mftcc-form .el-form-item,\r\n.mftcc-form-search .el-form-item {\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item,\r\n.mftcc-form-search .mftcc-form-group .el-form-item {\r\n padding: 0;\r\n}\r\n.mftcc-form .el-select,\r\n.mftcc-form-search .el-select {\r\n width: 100%;\r\n}\r\n.mftcc-form .form-el-row,\r\n.mftcc-form-search .form-el-row {\r\n width: 100%;\r\n}\r\n</style>\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n class=\"form-dialog\"\r\n :width=\"width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n :fullscreen=\"fullscreen||false\"\r\n :close-on-click-modal=\"false\"\r\n :center=\"center||false\">\r\n <div slot=\"title\" class=\"dialog-header\">\r\n {{ title||\"form表单\" }}\r\n </div>\r\n <div class=\"dialog-content\">\r\n <mftcc-form :formId=\"formId\" :parentVm=\"parentVm\" ref=\"dialogForm\"></mftcc-form> \r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\" v-if=\"footer === false?false:true\"> \r\n <el-button type=\"primary\" @click=\"submit\">{{confirmButtonText||\"确 定\"}}</el-button>\r\n <el-button @click=\"visible = false\">{{cancelButtonText||\"取 消\"}}</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport mftccForm from '../components/mftccForm'\r\n export default {\r\n data() {\r\n return {\r\n visible: this.show\r\n }\r\n },\r\n props: [\"show\",\"width\",\"height\",\"fullscreen\",\"center\",\"formId\",\"parentVm\",\"footer\",\"title\",\"confirmButtonText\",\"cancelButtonText\"],\r\n watch: {\r\n show () {\r\n this.visible = this.show;\r\n },\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n getFormRef(callback){\r\n this.$nextTick(() => {\r\n if(typeof callback === 'function'){\r\n callback(this.$refs.dialogForm)\r\n }\r\n })\r\n },\r\n submit(){\r\n var value = this.$refs.dialogForm.getFormValue();\r\n this.$emit('callback', value);\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.height||'600px';\r\n }\r\n },\r\n components: {\r\n mftccForm\r\n }\r\n }\r\n</script>\r\n<style>\r\n.form-dialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.form-dialog .el-dialog__body{\r\n flex-grow: 1;\r\n overflow: auto;\r\n padding-top: 10px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.form-dialog .el-dialog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n}\r\n.form-dialog .el-dialog__body{\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n overflow: auto;\r\n padding-top: 10px;\r\n}\r\n","<template>\r\n <div\r\n ref=\"mftccTable\"\r\n style=\"flex-grow: 1; position: relative\"\r\n :class=\"option.query === 'query' ? 'mftcc-table-query' : 'mftcc-table'\"\r\n >\r\n <div class=\"tableTools\">\r\n <el-dropdown\r\n size=\"small\"\r\n v-if=\"option.isDColumn\"\r\n :hide-on-click=\"false\"\r\n class=\"el-dropdown-DColumn\"\r\n trigger=\"click\"\r\n >\r\n <el-button icon=\"el-icon-setting\" type=\"primary\" class=\"mftcc-table-dropdown\">\r\n </el-button>\r\n <el-dropdown-menu slot=\"dropdown\" style=\"text-align: center\">\r\n <div style=\"text-align: left\">\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-dropdown-item :key=\"index\" v-if=\"col.prop != ''\">\r\n <el-checkbox\r\n :checked=\"col.isShow\"\r\n v-model=\"col.isShow\"\r\n @change=\"checkChange(col)\"\r\n >{{ col.label }}</el-checkbox\r\n >\r\n </el-dropdown-item>\r\n </template>\r\n </div>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n <el-button\r\n v-if=\"option.isExport && $hasPerm(option.isExportPerm || true)\"\r\n type=\"primary\"\r\n class=\"exportBtn\"\r\n icon=\"el-icon-download\"\r\n @click=\"exportTable\"\r\n ></el-button>\r\n </div>\r\n <div v-loading=\"option.loading\">\r\n <el-table\r\n :data=\"option.tableData\"\r\n :max-height=\"maxHeight\"\r\n :height=\"height\"\r\n highlight-current-row\r\n :ref=\"option.tableId\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无数据\"\r\n :row-style=\"rowStyle\"\r\n :row-class-name=\"rowClassName\"\r\n :cell-style=\"cellStyle\"\r\n :cell-class-name=\"cellClassName\"\r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n >\r\n <template\r\n v-if=\"option.isSelect != '' && option.isSelect ? option.isSelect : false\"\r\n >\r\n <el-table-column type=\"selection\" width=\"55\"> </el-table-column>\r\n </template>\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-table-column\r\n v-if=\"col.prop != '' ? col.isShow : true\"\r\n :key=\"index\"\r\n :prop=\"col.prop\"\r\n :label=\"col.label\"\r\n :show-overflow-tooltip=\"col['show-overflow-tooltip'] === true ? true : false\"\r\n :min-width=\"col.width\"\r\n :fixed=\"col.fixed || false\"\r\n :align=\"col.align || 'left'\"\r\n :width=\"col.prop == '' ? col.width : ''\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <div v-if=\"col.prop == ''\">\r\n <template v-for=\"(btn, key) in col.data\">\r\n <el-button\r\n :key=\"key\"\r\n size=\"mini\"\r\n :disabled=\"buttonAuth(btn, scope.row)\"\r\n v-if=\"$hasPerm(btn.perm || true)\"\r\n @click=\"Fn(btn.type, scope.$index, scope.row)\"\r\n >{{ btn.label }}</el-button\r\n >\r\n </template>\r\n </div>\r\n <div v-else-if=\"col.href != undefined\">\r\n <div v-if=\"col.href.path != undefined\">\r\n <a href=\"javascript:void(0)\" @click=\"router(col.href, scope.row)\">{{\r\n tableFormatter(scope.row[col.prop], col)\r\n }}</a>\r\n </div>\r\n <div v-else-if=\"col.href.callbackType != undefined\">\r\n <a\r\n href=\"javascript:void(0)\"\r\n @click=\"Fn(col.href.callbackType, scope.$index, scope.row)\"\r\n >{{ tableFormatter(scope.row[col.prop], col) }}</a\r\n >\r\n </div>\r\n <div v-else>\r\n <span>{{ tableFormatter(scope.row[col.prop], col) }}</span>\r\n </div>\r\n </div>\r\n <div v-else-if=\"col.fieldType === 'switch'\">\r\n <el-switch\r\n v-model=\"scope.row[col.prop]\"\r\n :active-value=\"\r\n isEmpty(col.switchAttr) || isEmpty(col.switchAttr.activeValue)\r\n ? 0\r\n : col.switchAttr.activeValue\r\n \"\r\n :inactive-value=\"\r\n isEmpty(col.switchAttr) || isEmpty(col.switchAttr.inActiveValue)\r\n ? 1\r\n : col.switchAttr.inActiveValue\r\n \"\r\n :disabled=\"\r\n isEmpty(col.switchAttr) || isEmpty(col.switchAttr.disabled)\r\n ? false\r\n : col.switchAttr.disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(col.switchAttr) || isEmpty(col.switchAttr.readOnly)\r\n ? false\r\n : col.switchAttr.readOnly\r\n \"\r\n @change=\"Fn(col.switchAttr.changeEvent, scope.$index, scope.row)\"\r\n ></el-switch>\r\n </div>\r\n <div v-else>\r\n <span>{{ tableFormatter(scope.row[col.prop], col) }}</span>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </template>\r\n <!-- <el-table-column \r\n label=\"操作\"\r\n :min-width=\"option.buttons.width\">\r\n <template slot-scope=\"scope\">\r\n <el-button v-for=\"(btn,index) in option.buttons.data\" \r\n :key=\"index\" \r\n size=\"mini\" \r\n v-if=\"$hasPerm(btn.perm||true)\" \r\n @click=\"Fn(btn.type, scope.$index, scope.row)\">{{ btn.label }}</el-button>\r\n </template>\r\n </el-table-column> -->\r\n </el-table>\r\n </div>\r\n <el-pagination\r\n v-if=\"option.isPagination\"\r\n background\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n :page-size=\"pageSize\"\r\n :current-page=\"pageNo\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n :total=\"pageTotal\"\r\n >\r\n </el-pagination>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { findByPage, getParameter } from \"../axios\";\r\nimport formUtil from \"../utils/formUtil\";\r\nexport default {\r\n data() {\r\n return {\r\n option: {},\r\n searchData: {},\r\n maxHeight: null,\r\n height: null,\r\n pageNo: 1,\r\n pageSize: 10,\r\n pageTotal: 0,\r\n currentRow: null,\r\n\r\n isEmpty: formUtil.isEmpty,\r\n pramDicItem: {},\r\n exportHeader: [],\r\n exportField: [],\r\n };\r\n },\r\n props: [\"tableId\", \"initData\", \"initSearchData\", \"parentVm\"],\r\n watch: {\r\n tableId: {\r\n handler(val, oldVal) {\r\n this.initTable(() => {\r\n this.$emit(\"callback\");\r\n });\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n },\r\n mounted() {\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n },\r\n methods: {\r\n rowStyle(obj) {\r\n let event = this.option[\"row-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n rowClassName(obj) {\r\n let event = this.option[\"row-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n cellStyle(obj) {\r\n let event = this.option[\"cell-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n cellClassName(obj) {\r\n let event = this.option[\"cell-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n buttonAuth(btn, row) {\r\n let buttonAuth = false;\r\n let auth = btn.auth || \"\";\r\n let authArray = auth.split(\";\");\r\n for (let i in authArray) {\r\n if (!this.isEmpty(authArray[i])) {\r\n let authObj = authArray[i].split(\"-\");\r\n if (authObj.length === 2) {\r\n if (this.$store.getters.buttonAuth[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n } else if (row[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n }\r\n }\r\n }\r\n }\r\n return buttonAuth;\r\n },\r\n tableFormatter(cellValue, item) {\r\n let _this = this;\r\n let value = \"\";\r\n if (_this.isEmpty(cellValue)) {\r\n return cellValue;\r\n } else {\r\n value = cellValue;\r\n }\r\n let parmArray = _this.pramDicItem[item.prop];\r\n if (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\") {\r\n let checkBoxValue = \"\";\r\n let checkArray = cellValue.split(\"|\");\r\n for (let h in checkArray) {\r\n if (!_this.isEmpty(checkArray[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === checkArray[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (item.fieldType === \"text\") {\r\n if (item.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(cellValue);\r\n } else if (item.dataType === \"percentile\") {\r\n value = formUtil.numMulti(cellValue, 100);\r\n } else if (item.dataType === \"thousand\") {\r\n value = formUtil.numMulti(cellValue, 1000);\r\n } else if (item.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(cellValue, 10000);\r\n }\r\n } else if (item.fieldType === \"date\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd\";\r\n let format = \"yyyy-MM-dd\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else if (item.fieldType === \"datetime\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n let format = \"yyyy-MM-dd HH:mm:ss\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === cellValue) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n if (\r\n !_this.isEmpty(item.formatter) &&\r\n formUtil.parentVmExist(this, item.formatter)\r\n ) {\r\n value = this.parentVm._self[item.formatter](value);\r\n } else if (!_this.isEmpty(item.desensitization)) {\r\n value = formUtil.desensitization(value, item.desensitization);\r\n }\r\n return value;\r\n },\r\n Fn(method, index, row) {\r\n // this[method](index, row);\r\n //this.$emit('callback', method, index, row);\r\n if (formUtil.parentVmExist(this, method)) {\r\n this.parentVm._self[method](index, row);\r\n }\r\n },\r\n router(href, row) {\r\n let path = href.path;\r\n let query = {};\r\n for (let queryKey of href.query) {\r\n query[queryKey] = row[queryKey];\r\n }\r\n this.$router.push({ path: path, query: query });\r\n },\r\n tableResize() {\r\n if (!this.option.height || this.option.height == \"auto\") {\r\n if (this.option.maxHeight) {\r\n this.maxHeight = this.option.maxHeight;\r\n } else {\r\n this.maxHeight = this.$refs.mftccTable.offsetHeight;\r\n }\r\n this.option.maxHeight = this.maxHeight;\r\n if (this.option.isPagination === true) {\r\n if ((this.maxHeight + \"\").endsWith(\"px\")) {\r\n this.maxHeight =\r\n Number(this.maxHeight.substring(0, this.maxHeight.length - 2)) - 40;\r\n } else {\r\n this.maxHeight = Number(this.maxHeight) - 40;\r\n }\r\n }\r\n if (this.maxHeight <= 0) {\r\n this.maxHeight = null;\r\n }\r\n } else {\r\n this.height = this.option.height;\r\n }\r\n },\r\n getTableData(pageNo, pageSize, callback) {\r\n var _this = this;\r\n this.searchData = this.searchData || {};\r\n this.searchData.pageNo = pageNo;\r\n this.searchData.pageSize = pageSize;\r\n _this.option.tableData = [];\r\n findByPage(\r\n this.option.url,\r\n this.searchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n let dataList = res.list;\r\n if (_this.option.isPagination === true || pageSize == -1) {\r\n _this.option.tableData = dataList.records;\r\n _this.pageNo = dataList.current; // 当前页数\r\n _this.pageSize = dataList.size; // 每页数量\r\n _this.pageTotal = dataList.total; // 页面总数\r\n let colList = res.colList;\r\n if (colList && colList.length > 0) {\r\n _this.option.columns = colList;\r\n }\r\n } else {\r\n _this.option.tableData = dataList;\r\n }\r\n }\r\n _this.option.loading = false;\r\n _this.$nextTick(() => {\r\n _this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n },\r\n (error) => {\r\n _this.option.loading = false;\r\n _this.$nextTick(() => {\r\n _this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n }\r\n );\r\n },\r\n refresh() {\r\n this.getTableData(this.pageNo, this.pageSize);\r\n },\r\n search(searchData) {\r\n this.pageNo = 1;\r\n this.pageSize = 10;\r\n this.pageTotal = 0;\r\n this.currentRow = null;\r\n this.searchData = this.initSearchData || {};\r\n if (!this.isEmpty(searchData)) {\r\n for (let i in searchData) {\r\n this.searchData[i] = searchData[i];\r\n }\r\n }\r\n this.getTableData(this.pageNo, this.pageSize);\r\n },\r\n // handleRowChange(val) {\r\n // this.currentRow = val;\r\n // },\r\n handleSizeChange(val) {\r\n this.getTableData(1, val);\r\n },\r\n handleCurrentChange(val) {\r\n this.getTableData(val, this.pageSize);\r\n },\r\n checkChange(col) {\r\n console.log(col);\r\n },\r\n setSelectValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].clearSelection();\r\n } else if (arguments.length === 1) {\r\n this.setSelectValue(this.option.selectKey, arguments[0]);\r\n } else if (arguments.length === 2) {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(tableDatas[i]);\r\n }\r\n }\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(\r\n tableDatas[i],\r\n arguments[2]\r\n );\r\n }\r\n }\r\n }\r\n },\r\n getSelectValue() {\r\n let parmKeyArray = this.$refs[this.option.tableId].store.states.selection;\r\n return parmKeyArray;\r\n },\r\n setCurrentValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].setCurrentRow();\r\n } else if (arguments.length === 1) {\r\n this.setCurrentValue(this.option.selectKey, arguments[0]);\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n tableDatas[i][selectKey] === arguments[1]\r\n ) {\r\n this.$refs[this.option.tableId].setCurrentRow(tableDatas[i]);\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n getCurrentValue() {\r\n return this.currentRow;\r\n },\r\n currentChange(currentRow, oldCurrentRow) {\r\n this.currentRow = currentRow;\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n async initTable(callback) {\r\n let _this = this;\r\n _this.option = {};\r\n _this.searchData = _this.initSearchData || {};\r\n _this.maxHeight = null;\r\n _this.height = null;\r\n _this.pageNo = 1;\r\n _this.pageSize = 10;\r\n _this.pageTotal = 0;\r\n _this.currentRow = null;\r\n let tableData;\r\n try {\r\n if (this.tableId) {\r\n let jsonData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/table/\" + this.tableId + \".json\"\r\n );\r\n tableData = jsonData.data;\r\n }\r\n } catch (error) {\r\n _this.$message.error(\r\n \"未找到 [ \" + this.tableId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n _this.option = JSON.parse(JSON.stringify(tableData));\r\n if (_this.initData !== undefined) {\r\n for (let i in _this.initData) {\r\n _this.option[i] = _this.initData[i];\r\n }\r\n }\r\n\r\n let formItem = _this.option.columns;\r\n let dicKeyArray = [];\r\n for (let i in formItem) {\r\n if (formItem[i].prop !== \"\") {\r\n //解析字典项\r\n let dicKey = formItem[i].dicKey;\r\n if (!_this.isEmpty(dicKey)) {\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = formItem[i].prop;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n _this.$set(_this.pramDicItem, formItem[i].prop, formItem[i].dicItem);\r\n }\r\n\r\n //获取库中选择字典\r\n if (\r\n (formItem[i].fieldType === \"select\" ||\r\n formItem[i].fieldType === \"multipleSelection\") &&\r\n formItem[i].dataType === \"library\"\r\n ) {\r\n getParameter(\r\n formItem[i].library.url,\r\n { query: \"\" },\r\n true,\r\n function (reponse) {\r\n if (reponse.code === 0) {\r\n let parmArray = [];\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (!_this.isEmpty(formItem[i].library.realField)) {\r\n realField = formItem[i].library.realField;\r\n }\r\n if (!_this.isEmpty(formItem[i].library.showField)) {\r\n showField = formItem[i].library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n optCode: list[i][realField],\r\n optName: list[i][showField],\r\n };\r\n parmArray.push(option);\r\n }\r\n _this.$set(_this.pramDicItem, formItem[i].prop, parmArray);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n }\r\n });\r\n\r\n let url = _this.option.url;\r\n if (url !== undefined && url !== null && url !== \"\") {\r\n _this.getTableData(_this.pageNo, _this.pageSize, callback);\r\n } else {\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n }\r\n // _this.$nextTick(() => {\r\n // _this.tableResize();\r\n // })\r\n },\r\n exportTable() {\r\n this.$confirm(\"确定要导出当前列表全部数据?\", \"提示\", {\r\n dangerouslyUseHTMLString: true,\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n })\r\n .then(() => {\r\n this.getExpportData();\r\n })\r\n .catch(() => {});\r\n },\r\n getExpportData() {\r\n let loading = this.$loading({\r\n lock: true,\r\n text: \"正在拼命导出......\",\r\n spinner: \"el-icon-loading\",\r\n background: \"rgba(0, 0, 0, 0.7)\",\r\n });\r\n this.searchData = this.searchData || {};\r\n this.searchData.pageNo = 1;\r\n this.searchData.pageSize = -1;\r\n\r\n findByPage(\r\n this.option.url,\r\n this.searchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0 && res.list.records.length > 0) {\r\n require.ensure([], () => {\r\n /* eslint-disable */\r\n // 这里的径路要修改正确\r\n const { export_json_to_excel } = require(\"../plugins/Export2Excel.js\");\r\n /* eslint-enable */\r\n for (let c in this.option.columns) {\r\n if (this.option.columns[c].prop != \"\") {\r\n this.exportField.push(this.option.columns[c].prop);\r\n this.exportHeader.push(this.option.columns[c].label);\r\n }\r\n }\r\n let tableData = res.list.records;\r\n const data = this.formatJson(this.option.columns, tableData);\r\n export_json_to_excel(this.exportHeader, data, this.tableId);\r\n loading.close();\r\n });\r\n } else {\r\n this.$alert(res.msg, this.$alertTitle, {\r\n type: res.msgType,\r\n dangerouslyUseHTMLString: true,\r\n });\r\n loading.close();\r\n }\r\n },\r\n (error) => {\r\n console.log(error);\r\n loading.close();\r\n }\r\n );\r\n },\r\n formatJson(columns, tableData) {\r\n let data = tableData.map((data) => {\r\n return columns.map((col) => {\r\n if (col.prop != \"\") {\r\n let value = data[col.prop];\r\n return this.tableFormatter(value, col);\r\n } else {\r\n return null;\r\n }\r\n });\r\n });\r\n return data;\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n.mftcc-table .tableTools {\r\n position: absolute;\r\n z-index: 1;\r\n top: 8px;\r\n right: 8px;\r\n}\r\n.mftcc-table .exportBtn {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-table .mftcc-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table-query .el-table__body,\r\n.mftcc-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n/* .mftcc-table.nothingModel{\r\n margin-top: 10px;\r\n padding-top: 8px;\r\n} */\r\n.mftcc-table .exportBtn {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-table .mftcc-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table-query .el-table__body,\r\n.mftcc-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n.errorMessage .el-message__content {\r\n line-height: 20px;\r\n}\r\n.errorMessage .el-message__closeBtn {\r\n top: 24px;\r\n}\r\n","<template>\r\n <el-dialog \r\n :visible.sync=\"visible\"\r\n @close=\"$emit('update:show', false)\"\r\n :show=\"show\"\r\n class=\"mftcc-table-dialog\"\r\n :width=\"option.width||'1000px'\"\r\n @open=\"opened\"\r\n ref=\"dialog\"\r\n :close-on-click-modal=\"false\"\r\n :title=\"option.title||title\">\r\n <div class=\"dialog-content\">\r\n <template v-if=\"(option.formId && option.search !== false)?true:false\">\r\n <div class=\"mftcc-search-form\">\r\n <el-row>\r\n <el-col :span=\"20\">\r\n <div class=\"custom-search\">\r\n <mftcc-search-form \r\n :formId=\"option.formId\" \r\n :parentVm=\"parentVm\" \r\n ref=\"searchForm\">\r\n </mftcc-search-form> \r\n </div>\r\n </el-col>\r\n <el-col :span=\"4\">\r\n <div class=\"search-button\">\r\n <el-button type=\"primary\" @click=\"onSearch\">查询</el-button>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n </template>\r\n <div class=\"mftcc-dialog-content\">\r\n <mftcc-table \r\n :tableId=\"option.tableId\" \r\n :parentVm=\"parentVm\" \r\n :initData=\"initData\" \r\n :initSearchData=\"initSearchData\" \r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n ref=\"dialogList\">\r\n </mftcc-table> \r\n </div>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\" v-if=\"option.footer === false?false:true\">\r\n <el-button type=\"primary\" @click=\"submit\">确 定</el-button>\r\n <el-button @click=\"visible = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n<script>\r\nimport {postJson} from '../axios'\r\nimport mftccTable from '../components/mftccTable'\r\nimport formUtil from '../utils/formUtil'\r\nimport mftccSearchForm from '../components/mftccSearchForm'\r\n export default {\r\n data() {\r\n return {\r\n title: \"列表筛选器\",\r\n initData: {},\r\n visible: this.show,\r\n initSearchData: \"\",\r\n isEmpty: formUtil.isEmpty\r\n }\r\n },\r\n props: [\"show\",\"option\",\"parentVm\"],\r\n watch: {\r\n show () {\r\n let _this = this\r\n _this.visible = _this.show;\r\n if(_this.visible === true){\r\n if(_this.option.type === \"radio\"){\r\n _this.$set(_this.initData,\"isSelect\",false)\r\n }else{\r\n _this.$set(_this.initData,\"isSelect\",true)\r\n }\r\n _this.$set(_this.initData,\"tableData\",_this.option.data)\r\n _this.$set(_this.initData,\"isPagination\",_this.option.isPagination)\r\n _this.$set(_this.initData,\"url\",_this.option.url)\r\n _this.initSearchData = _this.option.initSearchData || {}\r\n \r\n _this.$nextTick(() => {\r\n if(_this.option.search !== false && !_this.isEmpty(_this.option.formId)){\r\n _this.$refs.searchForm.initForm()\r\n let searchData = _this.$refs.searchForm.getFormValue() || {};\r\n for(let i in searchData){\r\n _this.initSearchData[i] = searchData[i]\r\n }\r\n }\r\n _this.$refs.dialogList.initTable(function(){\r\n setTimeout(function() {\r\n for(let i in _this.option.value){\r\n if(_this.option.type === \"radio\" && _this.option.value[i].key !== undefined){\r\n _this.$refs.dialogList.setCurrentValue(_this.option.value[i].key,_this.option.value[i].value)\r\n }else if(_this.option.value[i].key !== undefined){\r\n _this.$refs.dialogList.setSelectValue(_this.option.value[i].key,_this.option.value[i].value)\r\n }\r\n }\r\n },0)\r\n })\r\n })\r\n }\r\n },\r\n option:{//深度监听,可监听到对象、数组的变化\r\n handler(val, oldVal){\r\n \r\n },\r\n deep:true //true 深度监听\r\n }\r\n },\r\n created(){\r\n \r\n },\r\n methods: {\r\n getFormRef(callback){\r\n this.$nextTick(() => {\r\n if(typeof callback === 'function'){\r\n callback(this.$refs.searchForm)\r\n }\r\n })\r\n },\r\n currentChange(currentRow, oldCurrentRow){\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n onSearch(){\r\n let data = this.$refs.searchForm.getFormValue()\r\n this.$refs.dialogList.search(data);\r\n },\r\n submit(){\r\n let value = [];\r\n if(this.option.type === \"radio\"){\r\n value = this.$refs.dialogList.getCurrentValue()\r\n }else{\r\n value = this.$refs.dialogList.getSelectValue()\r\n }\r\n this.$emit('callback', value);\r\n this.visible = false;\r\n },\r\n opened(){\r\n this.$refs.dialog.$el.children[0].style.height = this.option.height||'600px';\r\n }\r\n },\r\n components: {\r\n mftccTable,\r\n mftccSearchForm\r\n }\r\n }\r\n</script>\r\n<style>\r\n.mftcc-table-dialog .search_form_div{\r\n display: flex;\r\n align-items: flex-start;\r\n}\r\n.mftcc-table-dialog .dialog-content{\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n}\r\n\r\n.mftcc-table-dialog .mftcc-search-form .search-button button{\r\n float: right;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content{\r\n flex-grow: 1;\r\n display: flex;\r\n}\r\n.mftcc-table-dialog .el-dialog{\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n.mftcc-table-dialog .el-dialog__body{\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\n</style>","<template>\r\n <div\r\n ref=\"mftccEditTable\"\r\n style=\"width: 100%; flex-grow: 1; position: relative\"\r\n class=\"mftcc-edit-table\"\r\n >\r\n <el-dropdown\r\n size=\"small\"\r\n v-if=\"option.isDColumn\"\r\n :hide-on-click=\"false\"\r\n class=\"el-dropdown-DColumn\"\r\n trigger=\"click\"\r\n >\r\n <el-button icon=\"el-icon-setting\" type=\"primary\" class=\"mftcc-edit-table-dropdown\">\r\n </el-button>\r\n <el-dropdown-menu slot=\"dropdown\" style=\"text-align: center\">\r\n <div style=\"text-align: left\">\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-dropdown-item :key=\"index\" v-if=\"col.fieldName != ''\">\r\n <el-checkbox\r\n :checked=\"col.isShow\"\r\n v-model=\"col.isShow\"\r\n @change=\"checkChange(col)\"\r\n >{{ col.label }}</el-checkbox\r\n >\r\n </el-dropdown-item>\r\n </template>\r\n </div>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n <div v-loading=\"option.loading\">\r\n <el-form\r\n :model=\"formData\"\r\n :rules=\"rules\"\r\n :ref=\"option.formId\"\r\n @submit.native.prevent\r\n >\r\n <el-table\r\n :data=\"option.tableData\"\r\n :max-height=\"maxHeight\"\r\n :height=\"height\"\r\n highlight-current-row\r\n :ref=\"option.tableId\"\r\n style=\"width: 100%\"\r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n @row-click=\"rowClick\"\r\n @row-dblclick=\"rowDblclick\"\r\n empty-text=\"暂无数据\"\r\n :row-style=\"rowStyle\"\r\n :row-class-name=\"rowClassName\"\r\n :cell-style=\"cellStyle\"\r\n :cell-class-name=\"cellClassName\"\r\n >\r\n <template\r\n v-if=\"option.isSelect != '' && option.isSelect ? option.isSelect : false\"\r\n >\r\n <el-table-column type=\"selection\" width=\"55\"> </el-table-column>\r\n </template>\r\n <template v-for=\"(item, index) in option.columns\">\r\n <el-table-column\r\n v-if=\"item.fieldName != '' ? item.isShow : true\"\r\n :key=\"index\"\r\n :prop=\"item.fieldName\"\r\n :label=\"item.label\"\r\n :show-overflow-tooltip=\"\r\n item['show-overflow-tooltip'] === true ? true : false\r\n \"\r\n :min-width=\"item.width\"\r\n :fixed=\"item.fixed || false\"\r\n :align=\"item.align || 'left'\"\r\n :width=\"item.fieldName == '' ? item.width : ''\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <div v-if=\"item.fieldName == ''\">\r\n <template v-for=\"(btn, key) in item.data\">\r\n <el-button\r\n :key=\"key\"\r\n size=\"mini\"\r\n :disabled=\"buttonAuth(btn, scope.row)\"\r\n v-if=\"$hasPerm(btn.perm || true)\"\r\n @click=\"Fn(btn.type, scope.$index, scope.row)\"\r\n >{{ btn.label }}</el-button\r\n >\r\n </template>\r\n </div>\r\n <div v-else>\r\n <el-form-item\r\n :prop=\"item.fieldName + '_' + scope.$index\"\r\n v-show=\"editFlag[scope.$index] === true\"\r\n size=\"small\"\r\n style=\"margin-top: 20px\"\r\n >\r\n <template v-if=\"item.fieldType === 'text'\">\r\n <template v-if=\"item.dataType === 'money(yuan)'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @keyup.native=\"toMoney\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit'])\r\n ? false\r\n : item['show-word-limit']\r\n \"\r\n >\r\n <!-- <template slot=\"append\">元</template> -->\r\n <template slot=\"suffix\">元</template>\r\n </el-input>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"text\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit'])\r\n ? false\r\n : item['show-word-limit']\r\n \"\r\n >\r\n <template v-if=\"item.dataType === 'money(jiao)'\">\r\n <template slot=\"suffix\">角</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(分)'\">\r\n <template slot=\"suffix\">分</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(wan)'\">\r\n <template slot=\"suffix\">万元</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'money(yi)'\">\r\n <template slot=\"suffix\">亿元</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'percentile'\">\r\n <template slot=\"suffix\">%</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'thousand'\">\r\n <template slot=\"suffix\">‰</template>\r\n </template>\r\n <template v-else-if=\"item.dataType === 'tenThousand'\">\r\n <template slot=\"suffix\">‱</template>\r\n </template>\r\n </el-input>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'password'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @blur=\"blurFunc(item.dataType, $event)\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'checkbox'\">\r\n <el-checkbox-group\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n <el-checkbox\r\n v-for=\"boxItem in pramDicItem[item.fieldName]\"\r\n :key=\"boxItem.optCode\"\r\n :label=\"boxItem.optCode\"\r\n >\r\n {{ boxItem.optName }}</el-checkbox\r\n >\r\n </el-checkbox-group>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'select'\">\r\n <template v-if=\"item.dataType === 'library'\">\r\n <mftcc-library-select\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :url=\"item.library.url\"\r\n :realField=\"item.library.realField\"\r\n :showField=\"item.library.showField\"\r\n :multiple=\"false\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </mftcc-library-select>\r\n </template>\r\n <template v-else>\r\n <el-select\r\n autocomplete=\"off\"\r\n clearable\r\n filterable\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n <el-option\r\n v-for=\"selectItem in pramDicItem[item.fieldName]\"\r\n :key=\"selectItem.optCode\"\r\n :label=\"selectItem.optName\"\r\n :value=\"selectItem.optCode\"\r\n >\r\n </el-option>\r\n </el-select>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'multipleSelection'\">\r\n <template v-if=\"item.dataType === 'library'\">\r\n <mftcc-library-select\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :url=\"item.library.url\"\r\n :realField=\"item.library.realField\"\r\n :showField=\"item.library.showField\"\r\n :multiple=\"true\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </mftcc-library-select>\r\n </template>\r\n <template v-else>\r\n <el-select\r\n multiple\r\n autocomplete=\"off\"\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n <el-option\r\n v-for=\"selectItem in pramDicItem[item.fieldName]\"\r\n :key=\"selectItem.optCode\"\r\n :label=\"selectItem.optName\"\r\n :value=\"selectItem.optCode\"\r\n ></el-option>\r\n </el-select>\r\n </template>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'radio'\">\r\n <el-radio-group\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n <el-radio\r\n v-for=\"radioItem in pramDicItem[item.fieldName]\"\r\n :key=\"radioItem.optCode\"\r\n :label=\"radioItem.optCode\"\r\n >\r\n {{ radioItem.optName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'switch'\">\r\n <el-switch\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :active-value=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].switchValue\r\n .activeValue\r\n )\r\n ? '1'\r\n : columns[item.fieldName + '_' + scope.$index].switchValue\r\n .activeValue\r\n \"\r\n :inactive-value=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].switchValue\r\n .inActiveValue\r\n )\r\n ? '0'\r\n : columns[item.fieldName + '_' + scope.$index].switchValue\r\n .inActiveValue\r\n \"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n @change=\"changeFunc(item, $event, scope.$index, scope.row)\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n ></el-switch>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'date'\">\r\n <el-date-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :format=\"\r\n formData[item.fieldName + '_' + scope.$index] ===\r\n dateFormat(\r\n new Date('9999/12/31'),\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? 'yyyyMMdd'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? '长期'\r\n : isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .format\r\n )\r\n ? 'yyyy-MM-dd'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .format\r\n \"\r\n :value-format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? 'yyyyMMdd'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n \"\r\n type=\"date\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n :picker-options=\"\r\n !isEmpty(item.dateOption) && item.dateOption.isLong === true\r\n ? pickerOptions\r\n : {}\r\n \"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'time'\">\r\n <el-time-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat.format\r\n )\r\n ? 'HH:mm:ss'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .format\r\n \"\r\n :value-format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? 'HH:mm:ss'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n \"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n :picker-options=\"isEmpty(item.dateOption) ? {} : item.dateOption\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-time-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'datetime'\">\r\n <el-date-picker\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat.format\r\n )\r\n ? 'yyyy-MM-dd HH:mm:ss'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .format\r\n \"\r\n :value-format=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n )\r\n ? 'yyyyMMdd HH:mm:ss'\r\n : columns[item.fieldName + '_' + scope.$index].dateFormat\r\n .valueFormat\r\n \"\r\n type=\"datetime\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-date-picker>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'number'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"number\"\r\n v-model.number=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'textarea'\">\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n type=\"textarea\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n :maxlength=\"item.maxlength\"\r\n :show-word-limit=\"\r\n isEmpty(item['show-word-limit'])\r\n ? true\r\n : item['show-word-limit']\r\n \"\r\n >\r\n </el-input>\r\n </template>\r\n <template v-else-if=\"item.fieldType === 'query'\">\r\n <span>{{ tableFormatter(scope.row[item.fieldName], item) }}</span>\r\n </template>\r\n <template v-else>\r\n <el-input\r\n :ref=\"item.fieldName\"\r\n v-model=\"formData[item.fieldName + '_' + scope.$index]\"\r\n :placeholder=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].placeholder\r\n )\r\n ? ''\r\n : columns[item.fieldName + '_' + scope.$index].placeholder\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n v-on=\"events[item.fieldName]\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n ></el-input>\r\n </template>\r\n </el-form-item>\r\n\r\n <template v-if=\"item.fieldType === 'switch'\">\r\n <el-switch\r\n v-show=\"editFlag[scope.$index] === false\"\r\n :ref=\"item.fieldName + '_query'\"\r\n v-model=\"scope.row[item.fieldName]\"\r\n :active-value=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].switchValue\r\n .activeValue\r\n )\r\n ? 0\r\n : columns[item.fieldName + '_' + scope.$index].switchValue\r\n .activeValue\r\n \"\r\n :inactive-value=\"\r\n isEmpty(\r\n columns[item.fieldName + '_' + scope.$index].switchValue\r\n .inActiveValue\r\n )\r\n ? 1\r\n : columns[item.fieldName + '_' + scope.$index].switchValue\r\n .inActiveValue\r\n \"\r\n :disabled=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].disabled)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].disabled\r\n \"\r\n :readonly=\"\r\n isEmpty(columns[item.fieldName + '_' + scope.$index].readOnly)\r\n ? false\r\n : columns[item.fieldName + '_' + scope.$index].readOnly\r\n \"\r\n @change=\"changeFunc(item, $event, scope.$index, scope.row)\"\r\n @click.native=\"clickFunc(item, $event, scope.$index)\"\r\n ></el-switch>\r\n </template>\r\n <template v-else>\r\n <span v-show=\"editFlag[scope.$index] === false\">{{\r\n tableFormatter(scope.row[item.fieldName], item)\r\n }}</span>\r\n </template>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </template>\r\n </el-table>\r\n </el-form>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { findByList, getParameter } from \"../axios\";\r\nimport formUtil from \"../utils/formUtil\";\r\nexport default {\r\n data() {\r\n return {\r\n option: {},\r\n searchData: {},\r\n maxHeight: null,\r\n height: null,\r\n currentRow: null,\r\n isEmpty: formUtil.isEmpty,\r\n toMoney: formUtil.toMoney,\r\n dateFormat: formUtil.dateFormat,\r\n\r\n addFlag: {},\r\n editFlag: {},\r\n formData: {},\r\n formRules: {},\r\n rules: {},\r\n events: {},\r\n pramDicItem: {},\r\n columns: {},\r\n pickerOptions: {\r\n shortcuts: [\r\n {\r\n text: \"今天\",\r\n onClick(picker) {\r\n picker.$emit(\"pick\", new Date());\r\n },\r\n },\r\n {\r\n text: \"长期\",\r\n onClick(picker) {\r\n picker.$emit(\"pick\", new Date(\"9999/12/31\"));\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n },\r\n props: [\"tableId\", \"initData\", \"initSearchData\", \"parentVm\"],\r\n watch: {\r\n tableId: {\r\n handler(val, oldVal) {\r\n this.initTable(() => {\r\n this.$emit(\"callback\");\r\n });\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n formRules: {\r\n handler(val, oldVal) {\r\n let _this = this;\r\n let dataList = _this.option.tableData;\r\n let columns = _this.option.columns;\r\n _this.rules = {};\r\n for (let i in dataList) {\r\n for (let j in columns) {\r\n if (columns[j].fieldName !== \"\") {\r\n _this.$set(\r\n _this.rules,\r\n columns[j].fieldName + \"_\" + i,\r\n val[columns[j].fieldName]\r\n );\r\n }\r\n }\r\n }\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n option: {\r\n handler(val, oldVal) {\r\n let _this = this;\r\n let dataList = val.tableData;\r\n let columns = val.columns;\r\n _this.columns = {};\r\n for (let i in dataList) {\r\n for (let j in columns) {\r\n if (columns[j].fieldName !== \"\") {\r\n let newColumns = Object.assign({}, columns[j]);\r\n _this.$set(_this.columns, columns[j].fieldName + \"_\" + i, newColumns);\r\n }\r\n }\r\n }\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n },\r\n mounted() {\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n },\r\n methods: {\r\n rowStyle(obj) {\r\n let event = this.option[\"row-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n rowClassName(obj) {\r\n obj.row._$index = obj.rowIndex;\r\n let event = this.option[\"row-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n cellStyle(obj) {\r\n let event = this.option[\"cell-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n cellClassName(obj) {\r\n let event = this.option[\"cell-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n buttonAuth(btn, row) {\r\n let buttonAuth = false;\r\n let auth = btn.auth || \"\";\r\n let authArray = auth.split(\";\");\r\n for (let i in authArray) {\r\n if (!this.isEmpty(authArray[i])) {\r\n let authObj = authArray[i].split(\"-\");\r\n if (authObj.length === 2) {\r\n if (this.$store.getters.buttonAuth[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n } else if (row[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n }\r\n }\r\n }\r\n }\r\n return buttonAuth;\r\n },\r\n blurFunc(dataType, el) {\r\n formUtil.func_uior_valTypeImm(el, dataType);\r\n },\r\n tableFormatter(cellValue, item) {\r\n let _this = this;\r\n let value = \"\";\r\n if (_this.isEmpty(cellValue)) {\r\n return cellValue;\r\n } else {\r\n value = cellValue;\r\n }\r\n let parmArray = _this.pramDicItem[item.fieldName];\r\n if (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\") {\r\n let checkBoxValue = \"\";\r\n let checkArray = cellValue.split(\"|\");\r\n for (let h in checkArray) {\r\n if (!_this.isEmpty(checkArray[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === checkArray[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (item.fieldType === \"text\") {\r\n if (item.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(cellValue);\r\n } else if (item.dataType === \"percentile\") {\r\n value = formUtil.numMulti(cellValue, 100);\r\n } else if (item.dataType === \"thousand\") {\r\n value = formUtil.numMulti(cellValue, 1000);\r\n } else if (item.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(cellValue, 10000);\r\n }\r\n } else if (item.fieldType === \"date\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd\";\r\n let format = \"yyyy-MM-dd\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else if (item.fieldType === \"datetime\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n let format = \"yyyy-MM-dd HH:mm:ss\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === cellValue) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n if (\r\n !_this.isEmpty(item.formatter) &&\r\n formUtil.parentVmExist(this, item.formatter)\r\n ) {\r\n value = this.parentVm._self[item.formatter](value);\r\n } else if (!_this.isEmpty(item.desensitization)) {\r\n value = formUtil.desensitization(value, item.desensitization);\r\n }\r\n return value;\r\n },\r\n clickFunc(item, el, index) {\r\n let events = item.events;\r\n for (let i in events) {\r\n if (\r\n item.disabled !== true &&\r\n item.readOnly !== true &&\r\n events[i].type === \"click\" &&\r\n formUtil.parentVmExist(this, events[i].callback)\r\n ) {\r\n this.parentVm._self[events[i].callback](el, index);\r\n }\r\n }\r\n },\r\n changeFunc(item, el, index, row) {\r\n let events = item.events;\r\n for (let i in events) {\r\n if (\r\n item.disabled !== true &&\r\n item.readOnly !== true &&\r\n events[i].type === \"change\" &&\r\n formUtil.parentVmExist(this, events[i].callback)\r\n ) {\r\n this.parentVm._self[events[i].callback](el, index, row);\r\n }\r\n }\r\n },\r\n addData() {\r\n let _this = this;\r\n let columns = _this.option.columns;\r\n let newObj = {};\r\n for (let j in columns) {\r\n if (columns[j].fieldName !== \"\") {\r\n newObj[columns[j].fieldName] = \"\";\r\n }\r\n }\r\n if (arguments.length >= 0) {\r\n for (let i in arguments[0]) {\r\n newObj[i] = arguments[0][i];\r\n }\r\n }\r\n _this.option.tableData.push(newObj);\r\n _this.$set(_this.addFlag, _this.option.tableData.length - 1, true);\r\n _this.editTable(_this.option.tableData.length - 1, true);\r\n _this.$nextTick(() => {\r\n _this.$refs[_this.option.tableId].bodyWrapper.scrollTop =\r\n _this.$refs[_this.option.tableId].bodyWrapper.scrollHeight;\r\n });\r\n },\r\n editTable() {\r\n let _this = this;\r\n let tableData = _this.option.tableData;\r\n let columns = _this.option.columns;\r\n _this.rules = {};\r\n let formCoyeData = JSON.parse(JSON.stringify(this.formData)); //深度copy\r\n _this.formData = {};\r\n for (let i = tableData.length - 1; i >= 0; i--) {\r\n if (arguments.length === 0) {\r\n this.editTable(i, !_this.editFlag[i]);\r\n } else if (arguments.length === 1) {\r\n this.editTable(i, arguments[0]);\r\n } else if (arguments.length === 2) {\r\n if (arguments[0] == i) {\r\n _this.$set(_this.editFlag, arguments[0], arguments[1]);\r\n for (let j in columns) {\r\n if (columns[j].fieldName !== \"\") {\r\n _this.$set(\r\n _this.rules,\r\n columns[j].fieldName + \"_\" + i,\r\n _this.formRules[columns[j].fieldName]\r\n );\r\n let newColumns = Object.assign({}, columns[j]);\r\n _this.$set(_this.columns, columns[j].fieldName + \"_\" + i, newColumns);\r\n }\r\n }\r\n }\r\n } else if (arguments.length >= 3) {\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let j in value) {\r\n if (tableData[i][arguments[0]] == value[j]) {\r\n this.editTable(i, arguments[2]);\r\n }\r\n }\r\n }\r\n _this.setFormValue(i, tableData[i]);\r\n if (_this.editFlag[i] === false) {\r\n if (_this.addFlag[i] === true) {\r\n for (let j = 0; j < tableData.length - i; j++) {\r\n _this.$set(_this.addFlag, i + j, _this.addFlag[i + j + 1]);\r\n _this.$set(_this.editFlag, i + j, _this.editFlag[i + j + 1]);\r\n\r\n for (let k in columns) {\r\n if (columns[k].fieldName !== \"\") {\r\n formCoyeData[columns[k].fieldName + \"_\" + (i + j)] =\r\n formCoyeData[columns[k].fieldName + \"_\" + (i + j + 1)];\r\n let formItemData =\r\n formCoyeData[columns[k].fieldName + \"_\" + (i + j + 1)];\r\n if (!_this.isEmpty(formItemData)) {\r\n let formTextValue = this.getFormValueFormatter(\r\n columns[k],\r\n formItemData\r\n ).value;\r\n _this.setFormValue(i + j, columns[k].fieldName, formTextValue);\r\n } else {\r\n _this.setFormValue(i + j, columns[k].fieldName, \"\");\r\n }\r\n }\r\n }\r\n }\r\n tableData.splice(i, 1);\r\n }\r\n } else {\r\n for (let k in columns) {\r\n if (columns[k].fieldName !== \"\") {\r\n _this.$nextTick(() => {\r\n if (_this.addFlag[i] === true) {\r\n _this.$set(\r\n _this.columns[columns[k].fieldName + \"_\" + i],\r\n \"readOnly\",\r\n false\r\n );\r\n _this.$set(\r\n _this.columns[columns[k].fieldName + \"_\" + i],\r\n \"disabled\",\r\n false\r\n );\r\n }\r\n let formItemData = formCoyeData[columns[k].fieldName + \"_\" + i];\r\n if (!_this.isEmpty(formItemData)) {\r\n let formTextValue = this.getFormValueFormatter(columns[k], formItemData)\r\n .value;\r\n _this.setFormValue(i, columns[k].fieldName, formTextValue);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n },\r\n getFormValueFormatter(item, formItemData) {\r\n let formTextValue = formItemData;\r\n let checkFlag = false;\r\n if (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\") {\r\n formTextValue = formItemData.join(\"|\");\r\n checkFlag = true;\r\n } else if (item.fieldType === \"text\") {\r\n if (item.dataType === \"money(yuan)\") {\r\n formTextValue = formUtil.delcommafy(formItemData);\r\n } else if (item.dataType === \"percentile\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 100);\r\n } else if (item.dataType === \"thousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 1000);\r\n } else if (item.dataType === \"tenThousand\") {\r\n formTextValue = formUtil.numDiv(formTextValue, 10000);\r\n }\r\n }\r\n let result = {\r\n value: formTextValue,\r\n checkFlag: checkFlag,\r\n };\r\n return result;\r\n },\r\n validateForm(callback) {\r\n this.$refs[this.option.formId].validate((valid) => {\r\n if (formUtil.isFunction(callback)) {\r\n callback(valid);\r\n }\r\n });\r\n },\r\n clearValidateForm(props) {\r\n this.$nextTick(() => {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.formId].clearValidate();\r\n } else if (arguments.length >= 1) {\r\n this.$refs[this.option.formId].clearValidate(props);\r\n }\r\n });\r\n },\r\n setFormValue() {\r\n let formItem = this.option.columns;\r\n if (arguments.length === 1) {\r\n for (let i in arguments[0]) {\r\n for (let k in arguments[0][i]) {\r\n this.setFormValue(i, k, arguments[0][i][k]);\r\n }\r\n }\r\n } else if (arguments.length == 2) {\r\n for (let k in arguments[1]) {\r\n this.setFormValue(arguments[0], k, arguments[1][k]);\r\n }\r\n } else if (arguments.length >= 3) {\r\n this.$set(this.formData, arguments[1] + \"_\" + arguments[0], arguments[2]);\r\n for (let j in formItem) {\r\n if (arguments[1] === formItem[j].fieldName) {\r\n if (\r\n formItem[j].fieldType === \"checkbox\" ||\r\n formItem[j].fieldType === \"multipleSelection\"\r\n ) {\r\n let checkBoxArray = [];\r\n let checkArray = arguments[2].split(\"|\");\r\n for (let h in checkArray) {\r\n if (!this.isEmpty(checkArray[h])) {\r\n checkBoxArray.push(checkArray[h]);\r\n }\r\n }\r\n this.$set(this.formData, arguments[1] + \"_\" + arguments[0], checkBoxArray);\r\n } else if (formItem[j].fieldType === \"text\") {\r\n let formTextValue = arguments[2];\r\n if (formItem[j].dataType === \"money(yuan)\") {\r\n formTextValue = formUtil.formatMoney(formTextValue);\r\n } else if (formItem[j].dataType === \"percentile\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 100);\r\n } else if (formItem[j].dataType === \"thousand\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 1000);\r\n } else if (formItem[j].dataType === \"tenThousand\") {\r\n formTextValue = formUtil.numMulti(formTextValue, 10000);\r\n }\r\n this.$set(this.formData, arguments[1] + \"_\" + arguments[0], formTextValue);\r\n } else {\r\n this.$set(this.formData, arguments[1] + \"_\" + arguments[0], arguments[2]);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n getFormValue() {\r\n let _this = this;\r\n let formItem = this.option.columns;\r\n let data = JSON.parse(JSON.stringify(this.formData)); //深度copy\r\n if (arguments.length === 0) {\r\n let allData = [];\r\n let editData = [];\r\n let dataList = _this.option.tableData;\r\n for (let i in dataList) {\r\n if (_this.editFlag[i] === true) {\r\n let resultObj = _this.getFormValue(i);\r\n if (resultObj.isEdit === true) {\r\n editData.push(resultObj.data);\r\n }\r\n allData.push(resultObj.data);\r\n }\r\n }\r\n let result = {\r\n allData: allData,\r\n editData: editData,\r\n };\r\n return result;\r\n } else if (arguments.length == 1) {\r\n let dataList = _this.option.tableData;\r\n let dataObj = {};\r\n let isEdit = false;\r\n if (_this.editFlag[arguments[0]] === true) {\r\n for (let j in dataList[arguments[0]]) {\r\n dataObj[j] = data[j + \"_\" + arguments[0]];\r\n var checkFlag = false;\r\n for (let k in formItem) {\r\n if (j === formItem[k].fieldName) {\r\n let formText = this.getFormValueFormatter(\r\n formItem[k],\r\n data[j + \"_\" + arguments[0]]\r\n );\r\n dataObj[j] = formText.value;\r\n checkFlag = formText.checkFlag;\r\n }\r\n }\r\n let tableValue = dataList[arguments[0]][j];\r\n if (checkFlag) {\r\n dataObj[j] =\r\n dataObj[j].substring(dataObj[j].length - 1) == \"|\"\r\n ? dataObj[j].substring(0, dataObj[j].length - 1)\r\n : dataObj[j];\r\n tableValue =\r\n tableValue.substring(tableValue.length - 1) == \"|\"\r\n ? tableValue.substring(0, tableValue.length - 1)\r\n : tableValue;\r\n }\r\n if (dataObj[j] != tableValue) {\r\n isEdit = true;\r\n }\r\n }\r\n }\r\n let result = {\r\n isEdit: isEdit,\r\n data: dataObj,\r\n };\r\n return result;\r\n } else if (arguments.length >= 2) {\r\n let dataList = _this.option.tableData;\r\n let result = \"\";\r\n if (_this.editFlag[arguments[0]] === true) {\r\n let dataObj = _this.getFormValue(arguments[0]);\r\n if (!this.isEmpty(dataObj)) {\r\n result = dataObj.data[arguments[1]];\r\n }\r\n }\r\n return result;\r\n }\r\n },\r\n attrForm() {\r\n let formItem = this.option.columns;\r\n if (arguments.length === 2) {\r\n let value = \"\";\r\n for (let i in formItem) {\r\n if (formItem[i].fieldName === arguments[0]) {\r\n if (arguments[1] === \"dicItem\") {\r\n value = this.pramDicItem[arguments[0]];\r\n } else if (arguments[1] === \"events\") {\r\n value = this.events[arguments[0]];\r\n break;\r\n } else if (arguments[1] === \"rules\") {\r\n value = this.formRules[arguments[0]];\r\n break;\r\n } else {\r\n value = formItem[i][arguments[1]];\r\n break;\r\n }\r\n }\r\n }\r\n return value;\r\n } else if (arguments.length >= 3) {\r\n for (let i in formItem) {\r\n if (formItem[i].fieldName === arguments[0]) {\r\n if (arguments[1] === \"dicItem\") {\r\n this.$set(this.pramDicItem, arguments[0], arguments[2]);\r\n break;\r\n } else if (arguments[1] === \"events\") {\r\n //解析事件\r\n try {\r\n let eventsArray = arguments[2];\r\n let event = {};\r\n for (let evetIndex in eventsArray) {\r\n if (\r\n !this.isEmpty(eventsArray[evetIndex].type) &&\r\n eventsArray[evetIndex].type !== \"click\" &&\r\n formUtil.parentVmExist(this, eventsArray[evetIndex].callback)\r\n ) {\r\n event[eventsArray[evetIndex].type] = this.parentVm._self[\r\n eventsArray[evetIndex].callback\r\n ];\r\n }\r\n }\r\n this.$set(this.events, formItem[i].fieldName, event);\r\n } catch (error) {\r\n console.error(\"事件解析错误:\" + error);\r\n this.$set(this.events, formItem[i].fieldName, {});\r\n }\r\n break;\r\n } else if (arguments[1] === \"rules\") {\r\n //解析规则\r\n try {\r\n //解析规则\r\n let formRules = arguments[2];\r\n let fieldNameRules = [];\r\n if (formItem[i].fieldType === \"text\") {\r\n let type = formItem[i].dataType;\r\n if (type === \"int\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateInt;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"long\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateLong;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (\r\n type == \"double(2)\" ||\r\n type == \"double(4)\" ||\r\n type == \"double(6)\" ||\r\n type == \"money(fen)\" ||\r\n type == \"money(jiao)\" ||\r\n type == \"money(wan)\" ||\r\n type == \"money(yi)\" ||\r\n type == \"percentile\" ||\r\n type === \"thousand\" ||\r\n type == \"tenThousand\"\r\n ) {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateNumber;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"float\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateFloat;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"boolean\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateBoolean;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type === \"money(yuan)\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateMoney;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n }\r\n\r\n for (let k in formRules) {\r\n let fieldNameRule = {};\r\n let trigger = \"blur\";\r\n let message = \"\";\r\n let type = \"\";\r\n if (formRules[k].type === \"required\") {\r\n fieldNameRule[\"required\"] = true;\r\n trigger = \"blur\";\r\n message = formItem[i].label + \"不能为空\";\r\n } else if (formRules[k].type === \"validator\") {\r\n if (formUtil.parentVmExist(this, eformRules[k].validator)) {\r\n fieldNameRule[\"validator\"] = this.parentVm._self[\r\n eformRules[k].validator\r\n ];\r\n }\r\n trigger = \"blur\";\r\n } else if (formRules[k].type === \"number\") {\r\n trigger = \"blur\";\r\n message = formItem[i].label + \"必须为数字\";\r\n type = \"number\";\r\n } else if (formRules[k].type === \"email\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的邮箱\";\r\n type = \"email\";\r\n } else if (formRules[k].type === \"phone\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的手机号码\";\r\n fieldNameRule[\"pattern\"] = /^1[123456789]\\d{9}$/;\r\n } else if (formRules[k].type === \"mobile\") {\r\n trigger = \"blur\";\r\n message = \"请输入正确的电话号码\";\r\n fieldNameRule[\"pattern\"] = /^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$/;\r\n } else if (formRules[k].type === \"idNo\") {\r\n trigger = \"blur\";\r\n fieldNameRule[\"validator\"] = formUtil.validateIdNo;\r\n } else {\r\n //continue\r\n }\r\n\r\n if (\r\n formItem[i].fieldType === \"checkbox\" ||\r\n formItem[i].fieldType === \"multipleSelection\"\r\n ) {\r\n type = \"array\";\r\n }\r\n\r\n if (\r\n !this.isEmpty(formRules[k].min) &&\r\n !this.isEmpty(formRules[k].max)\r\n ) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message =\r\n formItem[i].label +\r\n \"长度必须大于等于\" +\r\n formRules[k].min +\r\n \"并且小于等于\" +\r\n formRules[k].max;\r\n } else if (!this.isEmpty(formRules[k].min)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n message = formItem[i].label + \"长度必须大于等于\" + formRules[k].min;\r\n } else if (!this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message = formItem[i].label + \"长度必须小于等于\" + formRules[k].max;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].message)) {\r\n message = formRules[k].message;\r\n }\r\n fieldNameRule[\"message\"] = message;\r\n\r\n if (!this.isEmpty(type)) {\r\n fieldNameRule[\"type\"] = type;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].trigger)) {\r\n trigger = formRules[k].trigger;\r\n }\r\n fieldNameRule[\"trigger\"] = trigger;\r\n\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n this.$set(this.formRules, formItem[i].fieldName, fieldNameRules);\r\n } catch (error) {\r\n console.error(\"规则解析错误:\" + error);\r\n this.$set(this.formRules, formItem[i].fieldName, []);\r\n }\r\n break;\r\n } else {\r\n formItem[i][arguments[1]] = arguments[2];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n Fn(method, index, row) {\r\n if (formUtil.parentVmExist(this, method)) {\r\n this.parentVm._self[method](index, row);\r\n }\r\n },\r\n tableResize() {\r\n if (!this.option.height || this.option.height == \"auto\") {\r\n if (this.option.maxHeight) {\r\n this.maxHeight = this.option.maxHeight;\r\n } else {\r\n this.maxHeight = this.$refs.mftccEditTable.offsetHeight;\r\n }\r\n this.option.maxHeight = this.maxHeight;\r\n if (this.option.isPagination === true) {\r\n if ((this.maxHeight + \"\").endsWith(\"px\")) {\r\n this.maxHeight =\r\n Number(this.maxHeight.substring(0, this.maxHeight.length - 2)) - 40;\r\n } else {\r\n this.maxHeight = Number(this.maxHeight) - 40;\r\n }\r\n }\r\n if (this.maxHeight <= 0) {\r\n this.maxHeight = null;\r\n }\r\n } else {\r\n this.height = this.option.height;\r\n }\r\n },\r\n getTableData(callback) {\r\n var _this = this;\r\n _this.searchData = _this.searchData || {};\r\n _this.option.tableData = [];\r\n findByList(\r\n _this.option.url,\r\n _this.searchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n let dataList = res.list;\r\n for (let i in dataList) {\r\n _this.$set(_this.editFlag, i, false);\r\n _this.$set(_this.addFlag, i, false);\r\n }\r\n _this.option.tableData = dataList;\r\n }\r\n _this.option.loading = false;\r\n _this.$nextTick(() => {\r\n _this.initForm();\r\n _this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n },\r\n (error) => {\r\n _this.option.loading = false;\r\n _this.$nextTick(() => {\r\n _this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n }\r\n );\r\n },\r\n refresh() {\r\n this.getTableData();\r\n },\r\n search(searchData) {\r\n this.pageNo = 1;\r\n this.pageSize = 10;\r\n this.pageTotal = 0;\r\n this.currentRow = null;\r\n this.searchData = this.initSearchData || {};\r\n if (!this.isEmpty(searchData)) {\r\n for (let i in searchData) {\r\n this.searchData[i] = searchData[i];\r\n }\r\n }\r\n this.getTableData();\r\n },\r\n checkChange(col) {\r\n console.log(col);\r\n },\r\n setSelectValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].clearSelection();\r\n } else if (arguments.length === 1) {\r\n this.setSelectValue(this.option.selectKey, arguments[0]);\r\n } else if (arguments.length === 2) {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(tableDatas[i]);\r\n }\r\n }\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(\r\n tableDatas[i],\r\n arguments[2]\r\n );\r\n }\r\n }\r\n }\r\n },\r\n getSelectValue() {\r\n let parmKeyArray = this.$refs[this.option.tableId].store.states.selection;\r\n return parmKeyArray;\r\n },\r\n setCurrentValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].setCurrentRow();\r\n } else if (arguments.length === 1) {\r\n this.setCurrentValue(this.option.selectKey, arguments[0]);\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n tableDatas[i][selectKey] === arguments[1]\r\n ) {\r\n this.$refs[this.option.tableId].setCurrentRow(tableDatas[i]);\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n getCurrentValue() {\r\n return this.currentRow;\r\n },\r\n currentChange(currentRow, oldCurrentRow) {\r\n this.currentRow = currentRow;\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n rowClick(row, column, event) {\r\n if (!this.editFlag[row._$index]) {\r\n this.$emit(\"row-click\", row, column, event);\r\n }\r\n },\r\n rowDblclick(row, column, event) {\r\n if (!this.editFlag[row._$index]) {\r\n this.$emit(\"row-dblclick\", row, column, event);\r\n }\r\n },\r\n initForm() {\r\n let dataList = this.option.tableData;\r\n for (let i in dataList) {\r\n this.setFormValue(i, dataList[i]);\r\n }\r\n },\r\n async initTable(callback) {\r\n let _this = this;\r\n _this.option = {};\r\n _this.searchData = _this.initSearchData || {};\r\n _this.maxHeight = null;\r\n _this.height = null;\r\n _this.currentRow = null;\r\n let tableData;\r\n try {\r\n if (this.tableId) {\r\n let jsonData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/table/\" + this.tableId + \".json\"\r\n );\r\n tableData = jsonData.data;\r\n }\r\n } catch (error) {\r\n _this.$message.error(\r\n \"未找到 [ \" + this.tableId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n _this.option = JSON.parse(JSON.stringify(tableData));\r\n if (_this.initData !== undefined) {\r\n for (let i in _this.initData) {\r\n _this.option[i] = _this.initData[i];\r\n }\r\n }\r\n\r\n let formItem = _this.option.columns;\r\n let dicKeyArray = [];\r\n for (let i in formItem) {\r\n if (formItem[i].fieldName !== \"\") {\r\n //解析字典项\r\n let dicKey = formItem[i].dicKey;\r\n if (!_this.isEmpty(dicKey) && formItem[i].optionType !== \"1\") {\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = formItem[i].fieldName;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n _this.$set(_this.pramDicItem, formItem[i].fieldName, formItem[i].dicItem);\r\n }\r\n\r\n //解析事件\r\n _this.attrForm(formItem[i].fieldName, \"events\", formItem[i].events);\r\n\r\n //解析规则\r\n _this.attrForm(formItem[i].fieldName, \"rules\", formItem[i].rules);\r\n\r\n //获取库中选择字典\r\n if (\r\n (formItem[i].fieldType === \"select\" ||\r\n formItem[i].fieldType === \"multipleSelection\") &&\r\n formItem[i].dataType === \"library\"\r\n ) {\r\n getParameter(\r\n formItem[i].library.url,\r\n { query: \"\" },\r\n true,\r\n function (reponse) {\r\n if (reponse.code === 0) {\r\n let parmArray = [];\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (!_this.isEmpty(formItem[i].library.realField)) {\r\n realField = formItem[i].library.realField;\r\n }\r\n if (!_this.isEmpty(formItem[i].library.showField)) {\r\n showField = formItem[i].library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n optCode: list[i][realField],\r\n optName: list[i][showField],\r\n };\r\n parmArray.push(option);\r\n }\r\n _this.$set(_this.pramDicItem, formItem[i].fieldName, parmArray);\r\n }\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n }\r\n });\r\n\r\n let url = _this.option.url;\r\n if (url !== undefined && url !== null && url !== \"\") {\r\n _this.getTableData(callback);\r\n } else {\r\n if (typeof callback === \"function\") {\r\n _this.$nextTick(() => {\r\n _this.initForm();\r\n callback();\r\n });\r\n }\r\n }\r\n // _this.$nextTick(() => {\r\n // _this.tableResize();\r\n // })\r\n },\r\n },\r\n};\r\n</script>\r\n<style scoped>\r\n.mftcc-edit-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n.mftcc-edit-table .el-dropdown-DColumn {\r\n position: absolute;\r\n z-index: 1;\r\n top: 8px;\r\n right: 8px;\r\n}\r\n.mftcc-edit-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-edit-table .mftcc-edit-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-edit-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-edit-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n.mftcc-edit-table .el-dropdown-DColumn {\r\n position: absolute;\r\n z-index: 1;\r\n top: 8px;\r\n right: 8px;\r\n}\r\n.mftcc-edit-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-edit-table .mftcc-edit-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-edit-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n","<template>\r\n <div class=\"mftcc-definitidon-search\">\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <div class=\"custom-search\">\r\n <el-menu :default-active=\"filterMenuactiveIndex\" mode=\"horizontal\">\r\n <el-menu-item v-for=\"(menu, index) in filterMenu || []\" :key=\"index\" :index=\"index.toString()\" @click=\"menuSearch(menu.query)\">{{ menu.label }}</el-menu-item>\r\n </el-menu>\r\n <el-button type=\"text\" icon=\"el-icon-circle-plus-outline\" class=\"definitidon-button\" @click=\"searchShow = !searchShow\" v-if=\"filterDic.show === true\">定义筛选</el-button>\r\n </div>\r\n </el-col>\r\n <el-col :span=\"8\" class=\"search-col\">\r\n <div class=\"dynamic-search\">\r\n <el-input\r\n :placeholder=\"searchPlaceholder || '请输入查询条件'\"\r\n suffix-icon=\"el-icon-search\"\r\n v-model=\"searchData\"\r\n class=\"dynamic-input\"\r\n @input=\"search()\">\r\n </el-input>\r\n <el-button v-for=\"(filterButtonItem, index) in filterButton || []\" :key=\"index\" :icon=\"filterButtonItem.icon\" @click=\"buttonEvent(filterButtonItem.event)\">{{ filterButtonItem.label }}</el-button>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-collapse-transition>\r\n <div v-if=\"searchShow\">\r\n <div class=\"dynamic-edit-filter\">\r\n <span>已保存的历史检索</span>\r\n <el-tabs v-model=\"editableFilter\" type=\"card\" closable @tab-remove=\"removeFilter\" @tab-click=\"clickFilter\">\r\n <el-tab-pane\r\n v-for=\"filter in filters\"\r\n :key=\"filter.filterNo\"\r\n :label=\"filter.filterName\"\r\n :name=\"filter.filterNo\"\r\n >\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n <el-form :model=\"definitidonForm\" ref=\"definitidonForm\" @submit.native.prevent>\r\n <el-form-item\r\n v-for=\"(definitidon, index) in definitidonForm.definitidon\"\r\n :key=\"index\">\r\n <el-col :span=\"3\">\r\n <template v-if=\"index == 0\">\r\n 请选择:\r\n </template>\r\n <template v-else>\r\n <el-form-item :prop=\"'definitidon.' + index + '.andOr'\">\r\n <el-radio-group v-model=\"definitidon.andOr\">\r\n <el-radio-button label=\"0\">并且</el-radio-button>\r\n <el-radio-button label=\"1\">或者</el-radio-button>\r\n </el-radio-group>\r\n </el-form-item>\r\n </template>\r\n </el-col>\r\n <el-col :span=\"5\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.fieldName'\"\r\n :rules=\"[\r\n { required: true, message: '字段不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select \r\n v-model=\"definitidon.fieldName\" \r\n clearable \r\n placeholder=\"请选择\"\r\n @change=\"fieldChange(index)\">\r\n <el-option\r\n v-for=\"item in filterDic.filter\"\r\n :key=\"item.fieldName\"\r\n :label=\"item.label\"\r\n :value=\"item.fieldName\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"5\">\r\n <template v-if=\"getFilterDic(index).dicType !== ''\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.dicType'\"\r\n :rules=\"[\r\n { required: true, message: '条件不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select v-model=\"definitidon.dicType\" clearable placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"item in dicType[getFilterDic(index).dicType]\"\r\n :key=\"item.optCode\"\r\n :label=\"item.optName\"\r\n :value=\"item.optCode\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </template>\r\n </el-col>\r\n <template v-if=\"getFilterDic(index).dicType === 'select'\">\r\n <template v-if=\"definitidonForm.definitidon[index].dicType === '3' || definitidonForm.definitidon[index].dicType === '4'\">\r\n <el-col :span=\"4\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select v-model=\"definitidon.value\" clearable placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"item in getFilterDic(index).dicItem\"\r\n :key=\"item.optCode\"\r\n :label=\"item.optName\"\r\n :value=\"item.optCode\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col class=\"line\" :span=\"1\">-</el-col>\r\n <el-col :span=\"4\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.secondValue'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select v-model=\"definitidon.secondValue\" clearable placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"item in getFilterDic(index).dicItem\"\r\n :key=\"item.optCode\"\r\n :label=\"item.optName\"\r\n :value=\"item.optCode\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n <template v-else-if=\"definitidonForm.definitidon[index].dicType !== ''\">\r\n <el-col :span=\"9\">\r\n <el-form-item \r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-select v-model=\"definitidon.value\" clearable placeholder=\"请选择\">\r\n <el-option\r\n v-for=\"item in getFilterDic(index).dicItem\"\r\n :key=\"item.optCode\"\r\n :label=\"item.optName\"\r\n :value=\"item.optCode\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </template>\r\n <template v-else-if=\"getFilterDic(index).dicType === 'number'\">\r\n <template v-if=\"definitidonForm.definitidon[index].dicType === '3' || definitidonForm.definitidon[index].dicType === '4'\">\r\n <el-col :span=\"4\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"number\" v-model.number=\"definitidon.value\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col class=\"line\" :span=\"1\">-</el-col>\r\n <el-col :span=\"4\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.secondValue'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"number\" v-model.number=\"definitidon.secondValue\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n <template v-else-if=\"definitidonForm.definitidon[index].dicType !== ''\">\r\n <el-col :span=\"9\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"number\" v-model.number=\"definitidon.value\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </template>\r\n <template v-else-if=\"getFilterDic(index).dicType === 'text'\">\r\n <template v-if=\"definitidonForm.definitidon[index].dicType === '3' || definitidonForm.definitidon[index].dicType === '4'\">\r\n <el-col :span=\"4\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"text\" v-model=\"definitidon.value\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col class=\"line\" :span=\"1\">-</el-col>\r\n <el-col :span=\"4\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.secondValue'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"text\" v-model=\"definitidon.secondValue\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n <template v-else-if=\"definitidonForm.definitidon[index].dicType !== ''\">\r\n <el-col :span=\"9\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'blur' }\r\n ]\">\r\n <el-input type=\"text\" v-model=\"definitidon.value\" autocomplete=\"off\"></el-input>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </template>\r\n <template v-else-if=\"getFilterDic(index).dicType === 'date'\">\r\n <template v-if=\"definitidonForm.definitidon[index].dicType === '3' || definitidonForm.definitidon[index].dicType === '4'\">\r\n <el-col :span=\"9\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-date-picker \r\n v-model=\"definitidon.value\"\r\n type=\"daterange\"\r\n range-separator=\"至\"\r\n format=\"yyyy-MM-dd\"\r\n value-format=\"yyyyMMdd\"\r\n placeholder=\"请选择\">\r\n </el-date-picker>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n <template v-else-if=\"definitidonForm.definitidon[index].dicType !== ''\">\r\n <el-col :span=\"9\">\r\n <el-form-item\r\n :prop=\"'definitidon.' + index + '.value'\"\r\n :rules=\"[\r\n { required: true, message: '值不能为空!', trigger: 'change' }\r\n ]\">\r\n <el-date-picker \r\n v-model=\"definitidon.value\"\r\n format=\"yyyy-MM-dd\"\r\n value-format=\"yyyyMMdd\"\r\n type=\"date\"\r\n placeholder=\"请选择\">\r\n </el-date-picker>\r\n </el-form-item>\r\n </el-col>\r\n </template>\r\n </template>\r\n <el-col :span=\"2\">\r\n <el-button icon=\"el-icon-circle-plus-outline\" circle @click.prevent=\"addDefinitidon\" size=\"small\"></el-button>\r\n <template v-if=\"definitidonForm.definitidon.length !== 1\">\r\n <el-button icon=\"el-icon-circle-close\" circle @click.prevent=\"removeDefinitidon(index)\" size=\"small\"></el-button>\r\n </template>\r\n </el-col>\r\n </el-form-item>\r\n \r\n </el-form>\r\n <div class=\"mftcc-definitidon-btn\">\r\n <el-button type=\"primary\" @click=\"search()\">搜索</el-button>\r\n <el-button type=\"primary\" @click=\"submitFilter\">保存</el-button>\r\n <el-button type=\"primary\" @click=\"resetDefinitidon\">重置</el-button>\r\n </div>\r\n </div>\r\n \r\n </el-collapse-transition>\r\n </el-row>\r\n </div>\r\n</template>\r\n<script>\r\nimport {del,get,postJson,putJson} from '../axios'\r\n export default {\r\n props: [\"filterDic\",\"parentVm\",\"filterMenu\",\"filterButton\",\"searchPlaceholder\"],\r\n data() {\r\n return {\r\n defaultDefinitidon: {\r\n andOr: \"0\",\r\n fieldName: \"\",\r\n fieldType: \"\",\r\n dicType: \"\",\r\n value: \"\",\r\n secondValue: \"\"\r\n },\r\n definitidonForm:{\r\n definitidon: [\r\n {\r\n andOr: \"0\",\r\n fieldName: \"\",\r\n fieldType: \"\",\r\n dicType: \"\",\r\n value: \"\",\r\n secondValue: \"\"\r\n }\r\n ]\r\n },\r\n dicType: {\r\n \"select\": [\r\n {\"optName\": \"是\",\"optCode\": \"0\"},{\"optName\": \"不是\",\"optCode\": \"99\"}\r\n ],\r\n \"number\": [\r\n {\"optName\": \"等于\",\"optCode\": \"0\"},{\"optName\": \"大于\",\"optCode\": \"1\"},{\"optName\": \"小于\",\"optCode\": \"2\"},{\"optName\": \"在...之间\",\"optCode\": \"3\"},{\"optName\": \"不在...之间\",\"optCode\": \"4\"}\r\n ],\r\n \"text\": [\r\n {\"optName\": \"是\",\"optCode\": \"0\"}\r\n ],\r\n \"date\": [\r\n {\"optName\": \"等于\",\"optCode\": \"0\"},{\"optName\": \"大于\",\"optCode\": \"1\"},{\"optName\": \"小于\",\"optCode\": \"2\"},{\"optName\": \"在...之间\",\"optCode\": \"3\"},{\"optName\": \"不在...之间\",\"optCode\": \"4\"}\r\n ]\r\n },\r\n filters: [],\r\n editableFilter: 'default',\r\n clickTabFilter: 'default',\r\n searchShow: false,\r\n searchData: \"\",\r\n filterMenuactiveIndex: \"\"\r\n };\r\n },\r\n watch: {\r\n searchShow () {\r\n if(this.searchShow === true){\r\n this.init()\r\n }\r\n },\r\n filterMenu:{\r\n handler(val, oldVal) {\r\n for(let i = 0; i < val.length; i++){\r\n if(val[i].default === true){\r\n this.filterMenuactiveIndex = i.toString();\r\n }\r\n }\r\n },\r\n deep: true,\r\n immediate:true\r\n }\r\n },\r\n methods: {\r\n getSearchData(searchData){\r\n searchData.dynamicQuery = this.searchData\r\n if(this.searchShow === true){\r\n searchData.customQuery = JSON.stringify(this.definitidonForm.definitidon)\r\n }\r\n return searchData\r\n },\r\n buttonEvent(event){\r\n if(event !== undefined && event !== null && event !== \"\"){\r\n let searchData = this.getSearchData({})\r\n this.parentVm._self[event](searchData);\r\n }\r\n },\r\n //组件初始化方法\r\n init(){\r\n get(\"/mftcc-sys-server/sys/sysUserSearchFilter/findByVue/\"+this.parentVm.$options.name,null,true,res => {\r\n if(res.code === 0){\r\n let filterList = res.list;\r\n this.filters = filterList;\r\n this.editableFilter = 'default';\r\n this.clickTabFilter = 'default';\r\n let definitidonObj = JSON.parse(JSON.stringify(this.defaultDefinitidon))\r\n this.filters.unshift(\r\n {\r\n filterNo:'default',\r\n filterName:\"新增\",\r\n filterContent: JSON.stringify([definitidonObj])\r\n }\r\n );\r\n this.resetDefinitidon();\r\n }else{\r\n this.$alert(res.msg,this.$alertTitle,{\r\n type: res.msgType,\r\n dangerouslyUseHTMLString:true,\r\n callback: action => {\r\n this.searchShow = false\r\n }\r\n });\r\n }\r\n },error =>{\r\n this.searchShow = false\r\n });\r\n },\r\n //根据索引获取当前筛选配置\r\n getFilterDic(index){\r\n let result = {\r\n dicItem: [],\r\n dicType: ''\r\n }\r\n for(let filterDic of this.filterDic.filter){\r\n if(filterDic.fieldName === this.definitidonForm.definitidon[index].fieldName){\r\n result = filterDic\r\n }\r\n }\r\n return result\r\n },\r\n //字段change事件\r\n fieldChange(index){\r\n this.definitidonForm.definitidon[index].fieldType = this.getFilterDic(index).dicType\r\n this.definitidonForm.definitidon[index].dicType = \"\"\r\n this.definitidonForm.definitidon[index].value = \"\"\r\n this.definitidonForm.definitidon[index].secondValue = \"\"\r\n },\r\n //新增筛选\r\n submitFilter(){\r\n this.$refs.definitidonForm.validate((valid) => {\r\n if (valid) {\r\n let filterNo = this.clickTabFilter;\r\n let filterContent = JSON.stringify(this.definitidonForm.definitidon)\r\n let data = {\r\n vue: this.parentVm.$options.name,\r\n filterNo: filterNo,\r\n filterContent: filterContent\r\n }\r\n if(filterNo !== \"default\"){\r\n this.$confirm('此操作将保存该筛选, 是否继续?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n putJson(\"/mftcc-sys-server/sys/sysUserSearchFilter/update\",data,true,reponse => {\r\n if(reponse.code === 0){\r\n this.$message({\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true,\r\n message:reponse.msg\r\n });\r\n this.filters.forEach((currentValue,index,arr) => {\r\n if(currentValue.filterNo == filterNo){\r\n currentValue.filterContent = filterContent\r\n }\r\n })\r\n }else{\r\n this.$alert(reponse.msg, this.$alertTitle, {\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true\r\n });\r\n }\r\n });\r\n });\r\n }else{\r\n this.$prompt('请输入筛选名称', this.$alertTitle, {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputPattern: /\\S/,\r\n inputErrorMessage: '筛选名称不能为空'\r\n }).then(({ value }) => {\r\n data.filterName = value\r\n postJson(\"/mftcc-sys-server/sys/sysUserSearchFilter/insert\",data,true,res => {\r\n if(res.code === 0){\r\n this.$message({\r\n type: res.msgType,\r\n dangerouslyUseHTMLString:true,\r\n message: res.msg\r\n });\r\n this.filters.push(res.data);\r\n this.editableFilter = res.data.filterNo;\r\n this.clickTabFilter = res.data.filterNo;\r\n }else{\r\n this.$alert(res.msg,this.$alertTitle,{\r\n type: res.msgType,\r\n dangerouslyUseHTMLString:true\r\n });\r\n }\r\n });\r\n }).catch(() => { \r\n });\r\n }\r\n } else {\r\n return false;\r\n }\r\n });\r\n \r\n },\r\n //删除已保存筛选\r\n removeFilter(filterNo){\r\n if(filterNo !== 'default'){\r\n this.$confirm('此操作将永久删除该筛选, 是否继续?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n del(\"/mftcc-sys-server/sys/sysUserSearchFilter/deleteById/\"+filterNo,null,true,reponse => {\r\n if(reponse.code === 0){\r\n this.$message({\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true,\r\n message:reponse.msg\r\n });\r\n if(this.clickTabFilter === filterNo){\r\n this.editableFilter = 'default';\r\n this.clickTabFilter = 'default';\r\n this.resetDefinitidon();\r\n }\r\n this.filters.forEach((currentValue,index,arr) => {\r\n if(currentValue.filterNo == filterNo){\r\n this.filters.splice(index, 1)\r\n }\r\n })\r\n }else{\r\n this.$alert(reponse.msg, this.$alertTitle, {\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true\r\n });\r\n }\r\n });\r\n });\r\n }\r\n },\r\n //点击已保存的筛选\r\n clickFilter(filter){\r\n if(this.clickTabFilter !== filter.name){\r\n this.filters.forEach(currentValue => {\r\n if(currentValue.filterNo == filter.name){\r\n this.definitidonForm.definitidon = JSON.parse(currentValue.filterContent)\r\n }\r\n })\r\n this.clickTabFilter = filter.name\r\n }\r\n },\r\n //查询按钮回调\r\n search(){\r\n this.$refs.definitidonForm.validate((valid) => {\r\n if (valid) {\r\n let searchData = this.getSearchData({})\r\n this.$emit('search', searchData);\r\n } else {\r\n return false;\r\n }\r\n });\r\n },\r\n menuSearch(searchData){\r\n this.$emit('search', searchData);\r\n },\r\n //移除筛选\r\n removeDefinitidon(index) {\r\n this.definitidonForm.definitidon.splice(index, 1)\r\n },\r\n //重置筛选\r\n resetDefinitidon(){\r\n let definitidonObj = JSON.parse(JSON.stringify(this.defaultDefinitidon))\r\n this.definitidonForm.definitidon = [definitidonObj];\r\n },\r\n //添加筛选条件\r\n addDefinitidon() {\r\n let definitidonObj = JSON.parse(JSON.stringify(this.defaultDefinitidon))\r\n this.definitidonForm.definitidon.push(definitidonObj);\r\n }\r\n }\r\n }\r\n</script>\r\n<style>\r\n\r\n.mftcc-definitidon-search .dynamic-search{\r\n\twidth: 100%;\r\n\tmargin: 0;\r\n\theight: 34px;\r\n\tmargin-top: 8px;\r\n }\r\n.mftcc-definitidon-search .dynamic-search .dynamic-input{\r\n\twidth: 230px;\r\n\tfloat: left;\r\n}\r\n.mftcc-definitidon-search .dynamic-search .dynamic-input input{\r\n\tborder: 1px solid #4a7ec3;\r\n\tborder-radius: 0px;\r\n\theight: 34px;\r\n}\r\n.mftcc-definitidon-search .dynamic-search button{\r\n\tcolor: #4a7ec3;\r\n\tborder-color: #4A7EC3;\r\n\tborder-radius: 2px;\r\n\theight: 100%;\r\n\tfloat: left;\r\n padding: 10px 20px;\r\n background: none;\r\n}\r\n\r\n.mftcc-definitidon-search .custom-search{\r\n display: flex;\r\n margin-top: 4px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button{\r\n\tfont-size: 12px;\r\n\tcolor: #4a7ec3;\r\n margin-left: 10px;\r\n margin-top: -3px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button i{\r\n\tfont-size: 16px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button span{\r\n\tposition: relative;\r\n\ttop: -2px;\r\n}\r\n\r\n.mftcc-definitidon-search .custom-search .el-menu{\r\n border: none;\r\n background: none;\r\n}\r\n\r\n.mftcc-definitidon-search .el-menu .el-menu-item{\r\n height:34px;\r\n line-height: 34px;\r\n border: none;\r\n font-size: 12px;\r\n color: #3D3D3D;\r\n}\r\n.mftcc-definitidon-search .el-menu .el-menu-item:hover{\r\n background: none;\r\n}\r\n\r\n.mftcc-definitidon-search .el-menu .el-menu-item.is-active{\r\n color: #4A7EC3;\r\n\tfont-size: 14px;\r\n padding: 0 20px!important;\r\n border-bottom: 1px solid rgba(74,126,195,1) !important;\r\n}\r\n\r\n.mftcc-definitidon-search .search-col{\r\n float: right;\r\n width: auto;\r\n}\r\n\r\n\t.mftcc-definitidon-search .el-form>.el-form-item>.el-form-item__content{\r\n\t\tmargin: 0 auto;\r\n\t\twidth: 840px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-input{\r\n\t\tpadding-right: 10px;\r\n\t\tbox-sizing: border-box;\r\n\t}\r\n\t.mftcc-definitidon-search .el-col-3{\r\n\t\t text-align: right;\r\n\t\t padding-right: 10px;\r\n }\r\n .mftcc-definitidon-search .el-col-2:last-child{\r\n\t\t padding-left: 10px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-col-1.line{\r\n\t\ttext-align: center;\r\n\t\tpadding-right: 10px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-input__inner,.mftcc-definitidon-search .el-select{\r\n\t\twidth: 100%;\r\n\t}\r\n\t.mftcc-definitidon-search .el-date-editor.el-input,.mftcc-definitidon-search .el-date-editor.el-input__inner{\r\n width: calc(100% - 10px);\r\n border-radius: 0;\r\n height: 34px;\r\n }\r\n\r\n \t.mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange{\r\n border: 1px solid rgba(153,153,153,1);\r\n }\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range__icon,\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range__close-icon,\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range-separator{\r\n line-height: 26px;\r\n }\r\n\t.mftcc-definitidon-search .el-button.is-circle{\r\n\t\tpadding: 0;\r\n\t\tborder: none;\r\n\t}\r\n\t.mftcc-definitidon-search .el-button--small{\r\n\t\tfont-size: 16px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-input__suffix{\r\n right: 10px;\r\n top:-2px\r\n\t}\r\n\t.mftcc-definitidon-search .el-input .el-input__inner{\r\n height: 34px;\r\n\t\tpadding-right: 20px;\r\n\t\tborder: 1px solid rgba(153,153,153,1);\r\n border-radius: 0;\r\n\t}\r\n\t.mftcc-definitidon-search .el-radio-button__inner{\r\n\t\tpadding:10px 6px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-radio-button__orig-radio:checked+.el-radio-button__inner{\r\n\t\tbackground-color: rgba(68,148,249,1);\r\n border-color: rgba(68,148,249,1)\r\n\t}\r\n\t.mftcc-list .mftcc-search-form{\r\n\t\tposition: relative;\r\n\t}\r\n\t\t.mftcc-definitidon-search .el-form {\r\n\t\t\tpadding-bottom: 0px;\r\n\t\t\toverflow: hidden;\r\n padding-top: 10px;\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n }\r\n .mftcc-definitidon-search .dynamic-edit-filter{\r\n padding: 0 20px;\r\n }\r\n\t.mftcc-definitidon-search .mftcc-definitidon-btn{\r\n position: relative;\r\n text-align: center;\r\n padding: 6px 0;\r\n background: #EDF2FA;\r\n border:1px solid rgba(225,226,227,1);\r\n margin-bottom: 0;\r\n float: none;\r\n\t}\r\n\t.mftcc-definitidon-search .el-button--primary{\r\n\t\tpadding: 10px 36px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-button--primary:first-child{\r\n\t\tbackground:#4494F9;\r\n\t\tborder-color:#4494F9;\r\n\t}\r\n\t.mftcc-definitidon-search .el-button--primary:last-child{\r\n\t\tbackground:#fff ;\r\n\t\tborder-color:#D2D4D6 ;\r\n\t\tcolor: #333;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item{\r\n\t\tborder-radius: 14px;\r\n\t\theight: 28px;\r\n\t\tline-height: 28px;\r\n\t\tbackground: #EDF2FA;\r\n\t\tmargin-left: 10px;\r\n\t\tborder: 1px solid #E1E2E3;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs--card>.el-tabs__header .el-tabs__nav{\r\n\t\tborder:none;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs.el-tabs--card.el-tabs--top{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: relative;\r\n\t\ttop:20px;\r\n\t\tmargin-bottom: 20px;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs--card>.el-tabs__header{\r\n\t\tborder: none;\r\n\t}\r\n\t.mftcc-definitidon-search .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{\r\n background: #E3F2FD;\r\n color: #333;\r\n }\r\n .mftcc-definitidon-search .el-row:last-child{\r\n border:1px solid #E1E2E3;\r\n background: #fafafa;\r\n }\r\n.mftcc-definitidon-search .el-row:first-child{\r\n height: 50px;\r\n }\r\n\t@media screen and (min-width:1440px){\r\n \t.mftcc-definitidon-search .el-form>.el-form-item{\r\n\t\t\tfloat: left;\r\n\t\t}\r\n}\r\n\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n\r\n.mftcc-definitidon-search .dynamic-search{\r\n\twidth: 100%;\r\n\tmargin: 0;\r\n\theight: 34px;\r\n\tmargin-top: 8px;\r\n }\r\n.mftcc-definitidon-search .dynamic-search .dynamic-input{\r\n\twidth: 230px;\r\n\tfloat: left;\r\n}\r\n.mftcc-definitidon-search .dynamic-search .dynamic-input input{\r\n\tborder: 1px solid #4a7ec3;\r\n\tborder-radius: 0px;\r\n\theight: 34px;\r\n}\r\n.mftcc-definitidon-search .dynamic-search button{\r\n\tcolor: #4a7ec3;\r\n\tborder-color: #4A7EC3;\r\n\tborder-radius: 2px;\r\n\theight: 100%;\r\n\tfloat: left;\r\n padding: 10px 20px;\r\n background: none;\r\n}\r\n.mftcc-definitidon-search .custom-search{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n margin-top: 4px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button{\r\n\tfont-size: 12px;\r\n\tcolor: #4a7ec3;\r\n margin-left: 10px;\r\n margin-top: -3px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button i{\r\n\tfont-size: 16px;\r\n}\r\n.mftcc-definitidon-search .custom-search .definitidon-button span{\r\n\tposition: relative;\r\n\ttop: -2px;\r\n}\r\n.mftcc-definitidon-search .custom-search .el-menu{\r\n border: none;\r\n background: none;\r\n}\r\n.mftcc-definitidon-search .el-menu .el-menu-item{\r\n height:34px;\r\n line-height: 34px;\r\n border: none;\r\n font-size: 12px;\r\n color: #3D3D3D;\r\n}\r\n.mftcc-definitidon-search .el-menu .el-menu-item:hover{\r\n background: none;\r\n}\r\n.mftcc-definitidon-search .el-menu .el-menu-item.is-active{\r\n color: #4A7EC3;\r\n\tfont-size: 14px;\r\n padding: 0 20px!important;\r\n border-bottom: 1px solid rgba(74,126,195,1) !important;\r\n}\r\n.mftcc-definitidon-search .search-col{\r\n float: right;\r\n width: auto;\r\n}\r\n.mftcc-definitidon-search .el-form>.el-form-item>.el-form-item__content{\r\n\t\tmargin: 0 auto;\r\n\t\twidth: 840px;\r\n\t}\r\n.mftcc-definitidon-search .el-input{\r\n\t\tpadding-right: 10px;\r\n\t\t-webkit-box-sizing: border-box;\r\n\t\t box-sizing: border-box;\r\n\t}\r\n.mftcc-definitidon-search .el-col-3{\r\n\t\t text-align: right;\r\n\t\t padding-right: 10px;\r\n }\r\n.mftcc-definitidon-search .el-col-2:last-child{\r\n\t\t padding-left: 10px;\r\n\t}\r\n.mftcc-definitidon-search .el-col-1.line{\r\n\t\ttext-align: center;\r\n\t\tpadding-right: 10px;\r\n\t}\r\n.mftcc-definitidon-search .el-input__inner,.mftcc-definitidon-search .el-select{\r\n\t\twidth: 100%;\r\n\t}\r\n.mftcc-definitidon-search .el-date-editor.el-input,.mftcc-definitidon-search .el-date-editor.el-input__inner{\r\n width: calc(100% - 10px);\r\n border-radius: 0;\r\n height: 34px;\r\n }\r\n.mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange{\r\n border: 1px solid rgba(153,153,153,1);\r\n }\r\n.mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range__icon,\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range__close-icon,\r\n .mftcc-definitidon-search .el-date-editor.el-input__inner.el-date-editor--daterange .el-range-separator{\r\n line-height: 26px;\r\n }\r\n.mftcc-definitidon-search .el-button.is-circle{\r\n\t\tpadding: 0;\r\n\t\tborder: none;\r\n\t}\r\n.mftcc-definitidon-search .el-button--small{\r\n\t\tfont-size: 16px;\r\n\t}\r\n.mftcc-definitidon-search .el-input__suffix{\r\n right: 10px;\r\n top:-2px\r\n\t}\r\n.mftcc-definitidon-search .el-input .el-input__inner{\r\n height: 34px;\r\n\t\tpadding-right: 20px;\r\n\t\tborder: 1px solid rgba(153,153,153,1);\r\n border-radius: 0;\r\n\t}\r\n.mftcc-definitidon-search .el-radio-button__inner{\r\n\t\tpadding:10px 6px;\r\n\t}\r\n.mftcc-definitidon-search .el-radio-button__orig-radio:checked+.el-radio-button__inner{\r\n\t\tbackground-color: rgba(68,148,249,1);\r\n border-color: rgba(68,148,249,1)\r\n\t}\r\n.mftcc-list .mftcc-search-form{\r\n\t\tposition: relative;\r\n\t}\r\n.mftcc-definitidon-search .el-form {\r\n\t\t\tpadding-bottom: 0px;\r\n\t\t\toverflow: hidden;\r\n padding-top: 10px;\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n }\r\n.mftcc-definitidon-search .dynamic-edit-filter{\r\n padding: 0 20px;\r\n }\r\n.mftcc-definitidon-search .mftcc-definitidon-btn{\r\n position: relative;\r\n text-align: center;\r\n padding: 6px 0;\r\n background: #EDF2FA;\r\n border:1px solid rgba(225,226,227,1);\r\n margin-bottom: 0;\r\n float: none;\r\n\t}\r\n.mftcc-definitidon-search .el-button--primary{\r\n\t\tpadding: 10px 36px;\r\n\t}\r\n.mftcc-definitidon-search .el-button--primary:first-child{\r\n\t\tbackground:#4494F9;\r\n\t\tborder-color:#4494F9;\r\n\t}\r\n.mftcc-definitidon-search .el-button--primary:last-child{\r\n\t\tbackground:#fff ;\r\n\t\tborder-color:#D2D4D6 ;\r\n\t\tcolor: #333;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item{\r\n\t\tborder-radius: 14px;\r\n\t\theight: 28px;\r\n\t\tline-height: 28px;\r\n\t\tbackground: #EDF2FA;\r\n\t\tmargin-left: 10px;\r\n\t\tborder: 1px solid #E1E2E3;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs--card>.el-tabs__header .el-tabs__nav{\r\n\t\tborder:none;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs.el-tabs--card.el-tabs--top{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: relative;\r\n\t\ttop:20px;\r\n\t\tmargin-bottom: 20px;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs--card>.el-tabs__header{\r\n\t\tborder: none;\r\n\t}\r\n.mftcc-definitidon-search .el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{\r\n background: #E3F2FD;\r\n color: #333;\r\n }\r\n.mftcc-definitidon-search .el-row:last-child{\r\n border:1px solid #E1E2E3;\r\n background: #fafafa;\r\n }\r\n.mftcc-definitidon-search .el-row:first-child{\r\n height: 50px;\r\n }\r\n@media screen and (min-width:1440px){\r\n \t.mftcc-definitidon-search .el-form>.el-form-item{\r\n\t\t\tfloat: left;\r\n\t\t}\r\n}\r\n\r\n","<template>\r\n <div class=\"act-form\">\r\n <iframe :src=\"src\" ref=\"iframeDemo\" frameBorder=\"0\"></iframe>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n\r\nexport default {\r\n data () {\r\n return {\r\n src: 'http://192.168.1.113:8080'\r\n }\r\n },\r\n mounted: function () {\r\n }\r\n}\r\n</script>\r\n<style scoped>\r\n.act-form,.act-form iframe{\r\n padding: 0;\r\n height: 100%;\r\n width: 100%;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.act-form,.act-form iframe{\r\n padding: 0;\r\n height: 100%;\r\n width: 100%;\r\n}\r\n","<template>\r\n <div class=\"mftcc-layout-header\">\r\n <div class=\"outer-west-logo\">\r\n <div class=\"layout-logo\"></div>\r\n </div>\r\n <div class=\"middle-north-west\">\r\n <span class=\"logodes\"></span>\r\n <div class=\"layout-title\"></div>\r\n </div>\r\n <div class=\"middle-north-east\" @click=\"fixedMenu\">\r\n <i class=\"el-icon-menu\"></i>\r\n </div>\r\n <div class=\"middle-north-center\">\r\n <el-menu\r\n mode=\"horizontal\"\r\n @select=\"headerMenuFunc\"\r\n class=\"mftcc-header-menu\"\r\n ref=\"headerMenu\"\r\n >\r\n <el-menu-item index=\"search\" v-if=\"searchShow\">\r\n <i class=\"el-icon-search\"></i>\r\n <span>搜索</span>\r\n </el-menu-item>\r\n <el-menu-item index=\"notice\" class=\"menu-notice\">\r\n <el-badge :value=\"noticeNum\" :max=\"99\" class=\"menu-notice-num\" type=\"info\">\r\n <i class=\"el-icon-message\"></i>\r\n </el-badge>\r\n </el-menu-item>\r\n <el-menu-item index=\"approval\" class=\"menu-approval\">\r\n <i class=\"el-icon-s-comment\"></i>\r\n <el-badge :value=\"approvalNum\" class=\"menu-approval-num\" type=\"info\">\r\n <span>待办任务</span>\r\n </el-badge>\r\n </el-menu-item>\r\n <el-menu-item index=\"user\" class=\"menu-user\">\r\n <el-popover\r\n placement=\"bottom-end\"\r\n title=\"\"\r\n trigger=\"hover\"\r\n width=\"190px\"\r\n popper-class=\"menu-user-content\"\r\n :offset=\"0\"\r\n >\r\n <div class=\"menu-user-title\" @click=\"headerMenuFunc('user')\">\r\n <div class=\"menu-user-message\">\r\n <div>\r\n <p>{{ userName }}</p>\r\n <p>{{ phone }}</p>\r\n </div>\r\n <div>\r\n <img :src=\"userImg\" />\r\n </div>\r\n </div>\r\n <div class=\"menu-user-depar\">\r\n <p>{{ brName }}</p>\r\n </div>\r\n </div>\r\n <div class=\"menu-user-button\">\r\n <el-button type=\"primary\" icon=\"el-icon-lock\" @click=\"updatePassword\"\r\n >修改密码</el-button\r\n >\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <el-button type=\"primary\" icon=\"el-icon-circle-close\" @click=\"signOut\"\r\n >退出系统</el-button\r\n >\r\n </div>\r\n <div class=\"menu-user-info\" slot=\"reference\">\r\n <img :src=\"userImg\" />\r\n <span>欢迎您,{{ userName }}</span>\r\n </div>\r\n </el-popover>\r\n </el-menu-item>\r\n </el-menu>\r\n </div>\r\n </div>\r\n</template>\r\n<script>\r\nexport default {\r\n data() {\r\n return {\r\n searchShow: false,\r\n };\r\n },\r\n props: {\r\n userName: String,\r\n approvalNum: String,\r\n noticeNum: Number,\r\n brName: String,\r\n phone: String,\r\n userImg: String,\r\n },\r\n methods: {\r\n signOut() {\r\n this.$emit(\"signOut\");\r\n },\r\n updatePassword() {\r\n this.$emit(\"updatePassword\");\r\n },\r\n headerMenuFunc(index, indexPath) {\r\n this.$emit(\"cancelSelect\", \"menu\", null);\r\n this.$emit(\"menuFunc\", index);\r\n },\r\n fixedMenu() {\r\n this.$emit(\"fixedMenuFunc\");\r\n },\r\n cancelSelect(index) {\r\n this.$refs.headerMenu.activeIndex = index;\r\n },\r\n getSelection() {\r\n return this.$refs.headerMenu.activeIndex;\r\n },\r\n },\r\n};\r\n</script>\r\n<style scoped>\r\n.layout-logo {\r\n background: url(/mftcc-base-web/static/libs/base/images/logo.png) no-repeat center;\r\n height: 100%;\r\n background-size: 100% 100%;\r\n}\r\n.layout-title {\r\n width: 214px;\r\n background: url(/mftcc-base-web/static/libs/base/images/logo_title.png) no-repeat center;\r\n height: 32px;\r\n background-size: 100% 100%;\r\n}\r\n</style>\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.layout-logo {\r\n background: url(/mftcc-base-web/static/libs/base/images/logo.png) no-repeat center;\r\n height: 100%;\r\n background-size: 100% 100%;\r\n}\r\n.layout-title {\r\n width: 214px;\r\n background: url(/mftcc-base-web/static/libs/base/images/logo_title.png) no-repeat center;\r\n height: 32px;\r\n background-size: 100% 100%;\r\n}\r\n","<template>\r\n <div class=\"mftcc-menu\">\r\n <el-menu :collapse=\"iscollapse\" class=\"menu\">\r\n <!-- 目录 -->\r\n <el-submenu :index=\"menu.id\" v-for=\"(menu, index) in menuData\" :key=\"index\">\r\n <template slot=\"title\">\r\n <i :class=\"menu.icon\"></i>\r\n <span slot=\"title\">{{menu.title}}</span>\r\n </template>\r\n \r\n <!-- 子菜单 -->\r\n <el-menu-item\r\n v-for=\"(item, index) in menu.children\"\r\n :key=\"index\"\r\n :index=\"item.id\"\r\n @click=\"navRouter(item)\"\r\n v-if=\"item.children === undefined || item.children.length===0\">\r\n <template slot=\"title\">\r\n <i :class=\"item.icon\"></i>\r\n <span slot=\"title\">{{item.title}}</span>\r\n </template>\r\n </el-menu-item>\r\n \r\n <el-submenu v-for=\"(item, index) in menu.children\"\r\n :key=\"index\"\r\n :index=\"item.id\"\r\n v-if=\"item.children !== undefined && item.children.length > 0\">\r\n <template slot=\"title\">\r\n <i :class=\"item.icon\"></i>\r\n <span slot=\"title\">{{item.title}}</span>\r\n </template>\r\n <!-- 子菜单 -->\r\n <el-menu-item\r\n v-for=\"(child, index) in item.children\"\r\n :key=\"index\"\r\n :index=\"child.id\"\r\n @click=\"navRouter(child)\">\r\n <template slot=\"title\">\r\n <i :class=\"child.icon\"></i>\r\n <span slot=\"title\">{{child.title}}</span>\r\n </template>\r\n </el-menu-item>\r\n </el-submenu>\r\n </el-submenu>\r\n </el-menu>\r\n </div>\r\n</template>\r\n<script>\r\nimport bus from \"../utils/bus\";\r\nexport default {\r\n inject: ['reload'],\r\n data() {\r\n return {\r\n menuData: []\r\n };\r\n },\r\n props: [\"iscollapse\"],\r\n created() {\r\n this.initMenu();\r\n },\r\n methods: {\r\n navRouter(item) {\r\n this.$router.push(item.url);\r\n // bus.$emit(\"changeMenu\", item);\r\n this.reload();\r\n },\r\n initMenu() {\r\n this.menuData = this.$store.getters.menu;\r\n }\r\n }\r\n};\r\n</script>\r\n<style>\r\n.mftcc-menu {\r\n height: 100%;\r\n}\r\n.mftcc-menu .el-menu{\r\n width: 200px;\r\n min-height: 100%;\r\n background-color: #304156;\r\n}\r\n.mftcc-menu .el-submenu>.el-submenu__title{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .el-submenu>.el-submenu__title:hover {\r\n background-color: #001528;\r\n}\r\n.mftcc-menu .menu>.el-submenu>.el-submenu__title{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .menu>.el-submenu>.el-submenu__title:hover {\r\n background-color: #263445;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline{\r\n background-color: #1f2d3d;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item,.el-menu-item{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item:hover,.el-menu-item:hover{\r\n background-color: #001528;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item.is-active{\r\n color: #1890ff;\r\n}\r\n.mftcc-menu .el-menu-item:focus, .el-menu-item:hover {\r\n outline: 0;\r\n background-color: transparent;\r\n}\r\n.mftcc-menu .el-menu--collapse{\r\n width: 64px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-menu {\r\n height: 100%;\r\n}\r\n.mftcc-menu .el-menu{\r\n width: 200px;\r\n min-height: 100%;\r\n background-color: #304156;\r\n}\r\n.mftcc-menu .el-submenu>.el-submenu__title{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .el-submenu>.el-submenu__title:hover {\r\n background-color: #001528;\r\n}\r\n.mftcc-menu .menu>.el-submenu>.el-submenu__title{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .menu>.el-submenu>.el-submenu__title:hover {\r\n background-color: #263445;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline{\r\n background-color: #1f2d3d;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item,.el-menu-item{\r\n color: rgb(191, 203, 217);\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item:hover,.el-menu-item:hover{\r\n background-color: #001528;\r\n}\r\n.mftcc-menu .el-submenu>.el-menu--inline>.el-menu-item.is-active{\r\n color: #1890ff;\r\n}\r\n.mftcc-menu .el-menu-item:focus, .el-menu-item:hover {\r\n outline: 0;\r\n background-color: transparent;\r\n}\r\n.mftcc-menu .el-menu--collapse{\r\n width: 64px;\r\n}\r\n","<template>\r\n <el-tabs v-model=\"activeIndex\" type=\"card\" closable @tab-click=\"tabClick\" @tab-remove=\"removeTab\">\r\n <el-tab-pane\r\n label=\"首页\"\r\n name=\"/main\">\r\n </el-tab-pane>\r\n <el-tab-pane\r\n v-for=\"item in tabsData\"\r\n :key=\"item.name\"\r\n :label=\"item.title\"\r\n :name=\"item.url\">\r\n </el-tab-pane>\r\n </el-tabs>\r\n</template>\r\n<script>\r\nimport bus from \"../utils/bus\";\r\nexport default {\r\n data() {\r\n return {\r\n activeIndex: '',\r\n tabsData: []\r\n }\r\n },\r\n created(){\r\n this.$store.commit(\"set_keepAlive\",\"\");\r\n if(this.$route.path != \"/main\"){\r\n this.checkTab(this.$route.meta.title, this.$route.path, this.$route.name);\r\n }\r\n // bus.$on(\"changeMenu\", (item) => { \r\n // this.checkTab(item.title, item.url, item.name);\r\n // });\r\n },\r\n methods: {\r\n checkTab(title, url, name) {\r\n let flag = false;\r\n for (let tab of this.tabsData) {\r\n if (tab.url === url) {\r\n flag = true;\r\n this.activeTab(title,url);\r\n break;\r\n }\r\n }\r\n if(!flag){\r\n this.addTab(title, url, name);\r\n }\r\n },\r\n activeTab(title, url){\r\n this.activeIndex = url;\r\n },\r\n addTab(title, url, name) {\r\n this.tabsData.push({\r\n name: name,\r\n title: title,\r\n url: url\r\n });\r\n let keepAlive = this.$store.getters.keepAlive;\r\n let arr;\r\n if(keepAlive == \"\"){\r\n arr = [];\r\n }else{\r\n arr = keepAlive.split(\",\");\r\n }\r\n arr.push(name);\r\n arr = arr.join(\",\");\r\n this.$store.commit(\"set_keepAlive\",arr);\r\n \r\n this.activeTab(title, url);\r\n },\r\n tabClick(tab) {\r\n let url = this.activeIndex;\r\n this.activeTab(tab.label, url);\r\n this.$router.push(url);\r\n },\r\n removeTab(targetName) {\r\n let tabs = this.tabsData;\r\n let activeName = this.activeIndex;\r\n let tabTitle = \"\",tabName = \"\";\r\n tabs.forEach((tab, index) => {\r\n if (tab.url === targetName) {\r\n tabName = tabs[index].name;\r\n let nextTab = tabs[index + 1] || tabs[index - 1];\r\n if (nextTab) {\r\n activeName = nextTab.url;\r\n tabTitle = nextTab.title;\r\n }\r\n }\r\n });\r\n \r\n this.tabsData = tabs.filter(tab => tab.url !== targetName);\r\n if(this.tabsData.length == 0){\r\n activeName = \"/main\";\r\n }\r\n \r\n let keepAlive = this.$store.getters.keepAlive;\r\n let arr = keepAlive.split(\",\");\r\n for(var i = 0; i < arr.length; i++) {\r\n if(arr[i] == tabName) {\r\n arr.splice(i, 1);\r\n break;\r\n }\r\n }\r\n arr = arr.join(\",\");\r\n this.$store.commit(\"set_keepAlive\",arr);\r\n\r\n this.activeTab(tabTitle, activeName);\r\n this.$router.push(activeName);\r\n }\r\n }\r\n }\r\n</script>\r\n<style scoped>\r\n.el-tabs--card>.el-tabs__header .el-tabs__item:first-child:hover{\r\n padding-left: 20px;\r\n}\r\n.el-tabs--card>.el-tabs__header .el-tabs__item:first-child>span{\r\n display: none;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.el-tabs--card>.el-tabs__header .el-tabs__item:first-child:hover{\r\n padding-left: 20px;\r\n}\r\n.el-tabs--card>.el-tabs__header .el-tabs__item:first-child>span{\r\n display: none;\r\n}\r\n","<template>\r\n <el-container class=\"mftcc-header\">\r\n <el-aside width=\"auto\">\r\n <mftcc-menu :iscollapse=\"iscollapse\"></mftcc-menu> \r\n </el-aside>\r\n <el-container>\r\n <el-header>\r\n <i class=\"menuCollapse el-icon-s-fold\" @click=\"collapseMenu()\"></i>\r\n <mftcc-breadcrumb ></mftcc-breadcrumb>\r\n <div class=\"menu-user\">\r\n <el-popover\r\n placement=\"bottom-end\"\r\n title=\"\"\r\n trigger=\"hover\"\r\n width=\"190px\"\r\n popper-class=\"menu-user-content\"\r\n :offset=\"0\">\r\n <div class=\"menu-user-title\">\r\n <div class=\"menu-user-message\">\r\n <div>\r\n <p>{{ opName }}</p>\r\n <p>{{ phone }}</p>\r\n </div>\r\n <div>\r\n <img :src=\"userImg\">\r\n </div>\r\n </div>\r\n <div class='menu-user-depar'>\r\n <p>{{ brName }}</p>\r\n </div>\r\n </div>\r\n <div class=\"menu-user-button\">\r\n <el-button type=\"primary\" icon=\"el-icon-lock\" @click=\"updatePassword\">修改密码</el-button>\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <el-button type=\"primary\" icon=\"el-icon-circle-close\" @click=\"signOut\">退出系统</el-button>\r\n </div>\r\n <div class=\"menu-user-info\" slot=\"reference\">\r\n <img :src=\"userImg\"> \r\n <span>欢迎您,{{ opName }}</span>\r\n </div>\r\n </el-popover>\r\n </div>\r\n </el-header>\r\n <!-- <mftcc-tab ></mftcc-tab> -->\r\n <el-main class=\"center-content\">\r\n <transition name=\"fade-transform\" mode=\"out-in\">\r\n <!-- <keep-alive :include=\"keepAlive\"> -->\r\n <router-view v-if=\"isRouterAlive\"/>\r\n <!-- </keep-alive> -->\r\n </transition>\r\n </el-main>\r\n </el-container>\r\n <el-dialog \r\n :visible.sync=\"updatePasswordFormShow\"\r\n :close-on-click-modal=\"false\"\r\n width=\"50%\"\r\n :center=\"true\">\r\n <div slot=\"title\" class=\"dialog-header\">\r\n <label>修改密码</label>\r\n </div>\r\n <div class=\"dialog-content\">\r\n <el-form :model=\"updatePasswordForm\" :rules=\"rules\" ref=\"updatePasswordForm\" label-width=\"100px\">\r\n <el-form-item\r\n label=\"登录账号\"\r\n prop=\"opNo\"\r\n v-show=\"false\">\r\n <el-input \r\n ref=\"opNo\"\r\n type=\"text\"\r\n v-model=\"updatePasswordForm.opNo\"\r\n placeholder=\"请输入登录账号\"\r\n :disabled=\"true\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item\r\n label=\"用户名\"\r\n prop=\"opName\"\r\n v-show=\"true\">\r\n <el-input \r\n ref=\"opName\"\r\n type=\"text\"\r\n v-model=\"updatePasswordForm.opName\"\r\n placeholder=\"请输入用户名\"\r\n :disabled=\"true\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item\r\n label=\"原密码\"\r\n prop=\"password\"\r\n v-show=\"true\">\r\n <el-input \r\n ref=\"password\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"updatePasswordForm.password\"\r\n placeholder=\"请输入原密码\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item\r\n label=\"新密码\"\r\n prop=\"newPassword\"\r\n v-show=\"true\">\r\n <el-input \r\n ref=\"newPassword\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"updatePasswordForm.newPassword\"\r\n placeholder=\"请输入新密码\">\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item\r\n label=\"确认密码\"\r\n prop=\"newPasswordChk\"\r\n v-show=\"true\">\r\n <el-input \r\n ref=\"newPasswordChk\"\r\n type=\"password\"\r\n autocomplete=\"off\"\r\n v-model=\"updatePasswordForm.newPasswordChk\"\r\n placeholder=\"确认密码\">\r\n </el-input>\r\n </el-form-item>\r\n </el-form>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\"> \r\n <el-button type=\"primary\" @click=\"updatePasswordFunc\">确 定</el-button>\r\n <el-button @click=\"updatePasswordFormShow = false\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport mftccMenu from '../layout/menu'\r\nimport mftccTab from '../layout/tab'\r\nimport mftccBreadcrumb from '../layout/breadcrumb'\r\nimport {postJsonNoLoading,postJson} from '../axios'\r\nexport default {\r\n name: 'App',\r\n components: {\r\n mftccMenu,\r\n mftccTab,\r\n mftccBreadcrumb\r\n },\r\n data(){\r\n return {\r\n iscollapse: false,\r\n\r\n opNo: this.$store.getters.user.opNo,\r\n opName: this.$store.getters.user.opName,\r\n brName: this.$store.getters.user.brName,\r\n phone: this.$store.getters.user.tel,\r\n userImg: require(\"./default/images/op_user.png\"),\r\n\t \r\n updatePasswordFormShow: false,\r\n updatePasswordForm: {\r\n opNo: \"\",\r\n opName: \"\",\r\n password: \"\",\r\n newPassword: \"\",\r\n newPasswordChk: \"\"\r\n },\r\n rules: {\r\n password: [\r\n {required: true, message: \"密码不能为空\", trigger: \"blur\" },\r\n {message: \"密码错误\", trigger: \"blur\", validator: this.validatePassword }\r\n ],\r\n newPassword: [\r\n {required: true, message: \"新密码不能为空\", trigger: \"blur\" },\r\n {message: \"\", trigger: \"blur\", validator: this.validateNewPassword }\r\n ],\r\n newPasswordChk: [\r\n {required: true, message: \"确认密码不能为空\", trigger: \"blur\" },\r\n {message: \"两次输入不同\", trigger: \"blur\", validator: this.validateNewPasswordChk }\r\n ]\r\n },\r\n isRouterAlive: true\r\n }\r\n },\r\n created: function () {\r\n \r\n },\r\n computed: {\r\n keepAlive() {\r\n return this.$store.getters.keepAlive\r\n }\r\n },\r\n provide(){\r\n return {\r\n reload:this.reload\r\n }\r\n },\r\n methods: {\r\n reload () {\r\n this.isRouterAlive = false\r\n this.$nextTick(() => (this.isRouterAlive = true))\r\n },\r\n collapseMenu(){\r\n if(this.iscollapse){\r\n this.iscollapse = false;\r\n }else{\r\n this.iscollapse = true;\r\n }\r\n },\r\n signOut(){\r\n let data = {\r\n opNo: this.opNo\r\n }\r\n postJsonNoLoading(\"/mftcc-sys-server/loginOut\",data,true,reponse => {\r\n },error => {\r\n });\r\n this.$store.commit('clearLogin');\r\n this.$router.push(\"/login\");\r\n },\r\n //修改密码事件回调\r\n updatePassword(){\r\n this.updatePasswordFormShow = true;\r\n this.updatePasswordForm.opNo = this.opNo;\r\n this.updatePasswordForm.opName = this.opName;\r\n },\r\n validatePassword(rule, value, callback){\r\n let data = {\r\n opNo: this.updatePasswordForm.opNo,\r\n password: this.updatePasswordForm.password\r\n }\r\n postJsonNoLoading(\"/mftcc-sys-server/sys/sysUser/validatePassword\",data,true,reponse => {\r\n if(reponse.code === 0){\r\n callback();\r\n }else{\r\n callback(new Error(reponse.msg));\r\n }\r\n },error => {\r\n callback(new Error('连接异常,密码校验失败'));\r\n });\r\n },\r\n validateNewPassword(rule, value, callback){\r\n let opNo = this.updatePasswordForm.opNo\r\n let newPassword = this.updatePasswordForm.newPassword\r\n let data = {\r\n opNo:opNo,\r\n password: newPassword\r\n }\r\n postJsonNoLoading(\"/mftcc-sys-server/sys/sysSecAuditConfig/validatePWAjax\",data,true,reponse => {\r\n if(reponse.code === 0){\r\n if(reponse.data.flag == \"success\"){\r\n callback();\r\n }else{\r\n callback(new Error(reponse.data.msg));\r\n }\r\n }else{\r\n callback(new Error(reponse.msg));\r\n }\r\n },error => {\r\n callback(new Error('连接异常,密码校验失败'));\r\n });\r\n },\r\n validateNewPasswordChk(rule, value, callback){\r\n let newPassword = this.updatePasswordForm.newPassword\r\n let newPasswordChk = this.updatePasswordForm.newPasswordChk\r\n if(newPasswordChk !== \"\" && newPassword !== newPasswordChk){\r\n callback(new Error('两次输入不同'));\r\n }else{\r\n callback();\r\n }\r\n },\r\n updatePasswordFunc(){\r\n this.$refs.updatePasswordForm.validate(valid => {\r\n if(valid === true){\r\n postJson(\"/mftcc-sys-server/sys/sysUser/updatePassword\",this.updatePasswordForm,true,reponse => {\r\n if(reponse.code === 0){\r\n this.$message({\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString:true,\r\n message: reponse.msg\r\n })\r\n this.signOut();\r\n }else{\r\n this.$alert(reponse.msg, this.$alertTitle, {\r\n type: reponse.msgType,\r\n dangerouslyUseHTMLString: true\r\n });\r\n }\r\n });\r\n }\r\n \r\n });\r\n }\r\n }\r\n}\r\n\r\n</script>\r\n<style>\r\n.mftcc-header .el-header, .el-footer {\r\n color: #333;\r\n text-align: center;\r\n display: flex;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n.mftcc-header .el-main {\r\n display: flex;\r\n color: #333;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n.mftcc-header .el-main>.pt{\r\n display: flex;\r\n width: 100%;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n}\r\nhtml,body,#app,.el-container.is-vertical{\r\n padding: 0px;\r\n margin: 0px;\r\n height: 100%;\r\n}\r\n.el-container{\r\n height: 100%;\r\n}\r\n.mftcc-header .menuCollapse{\r\n font-size: 28px;\r\n height: 100%;\r\n line-height: 60px;\r\n width: 60px;\r\n cursor: pointer;\r\n margin-right: 10px;\r\n}\r\n\r\n/* 头部个人信息样式 */\r\n.menu-user-content{\r\n padding: 0;\r\n background-color: #409EFF;\r\n width: 200px;\r\n margin-top: 5px !important;\r\n}\r\n.menu-user-content img{\r\n width: 55px;\r\n height: 55px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n color: #fff;\r\n}\r\n.menu-user-content .menu-user-title{\r\n padding: 20px;\r\n}\r\n.menu-user-content .menu-user-title p{\r\n color:#fff;\r\n margin: 0px 0 16px 0;\r\n display: inline-block;\r\n}\r\n.menu-user-content .popper__arrow{\r\n display: none;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message{\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:first-child{\r\n width:66.66%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:last-child{\r\n width:33.33%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-button{\r\n margin-top: 6%;\r\n width:100%;\r\n background-color: #4D4D4D;\r\n height: 45px;\r\n}\r\n.menu-user-content .menu-user-button button{\r\n background-color: #4D4D4D;\r\n font-size: 12px;\r\n width:calc(50% - 1px);\r\n float: left;\r\n border: none;\r\n margin-left: 0px;\r\n height:100%;\r\n padding: 0;\r\n}\r\n.menu-user-content .menu-user-button button:hover{\r\n background-color: #353535;\r\n}\r\n.menu-user-content .menu-user-button .el-divider{\r\n margin:0;\r\n width:2px;\r\n height: 14px;\r\n top: 14px;\r\n float: left;\r\n}\r\n.mftcc-header .menu-user{\r\n min-width: 200px;\r\n padding: 0px 15px;\r\n position: absolute;\r\n right: 20px;\r\n}\r\n.mftcc-header .menu-user .menu-user-info{\r\n height: 100%;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.mftcc-header .menu-user .menu-user-info img{\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 50%;\r\n margin-right: 12px;\r\n}\r\n.mftcc-header .menu-user .menu-user-info span{\r\n font-size: 14px;\r\n}\r\n</style>","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n.mftcc-header .el-header, .el-footer {\r\n color: #333;\r\n text-align: center;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n.mftcc-header .el-main {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n color: #333;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n.mftcc-header .el-main>.pt{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n width: 100%;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n}\r\nhtml,body,#app,.el-container.is-vertical{\r\n padding: 0px;\r\n margin: 0px;\r\n height: 100%;\r\n}\r\n.el-container{\r\n height: 100%;\r\n}\r\n.mftcc-header .menuCollapse{\r\n font-size: 28px;\r\n height: 100%;\r\n line-height: 60px;\r\n width: 60px;\r\n cursor: pointer;\r\n margin-right: 10px;\r\n}\r\n/* 头部个人信息样式 */\r\n.menu-user-content{\r\n padding: 0;\r\n background-color: #409EFF;\r\n width: 200px;\r\n margin-top: 5px !important;\r\n}\r\n.menu-user-content img{\r\n width: 55px;\r\n height: 55px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n color: #fff;\r\n}\r\n.menu-user-content .menu-user-title{\r\n padding: 20px;\r\n}\r\n.menu-user-content .menu-user-title p{\r\n color:#fff;\r\n margin: 0px 0 16px 0;\r\n display: inline-block;\r\n}\r\n.menu-user-content .popper__arrow{\r\n display: none;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message{\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:first-child{\r\n width:66.66%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:last-child{\r\n width:33.33%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-button{\r\n margin-top: 6%;\r\n width:100%;\r\n background-color: #4D4D4D;\r\n height: 45px;\r\n}\r\n.menu-user-content .menu-user-button button{\r\n background-color: #4D4D4D;\r\n font-size: 12px;\r\n width:calc(50% - 1px);\r\n float: left;\r\n border: none;\r\n margin-left: 0px;\r\n height:100%;\r\n padding: 0;\r\n}\r\n.menu-user-content .menu-user-button button:hover{\r\n background-color: #353535;\r\n}\r\n.menu-user-content .menu-user-button .el-divider{\r\n margin:0;\r\n width:2px;\r\n height: 14px;\r\n top: 14px;\r\n float: left;\r\n}\r\n.mftcc-header .menu-user{\r\n min-width: 200px;\r\n padding: 0px 15px;\r\n position: absolute;\r\n right: 20px;\r\n}\r\n.mftcc-header .menu-user .menu-user-info{\r\n height: 100%;\r\n width: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n}\r\n.mftcc-header .menu-user .menu-user-info img{\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 50%;\r\n margin-right: 12px;\r\n}\r\n.mftcc-header .menu-user .menu-user-info span{\r\n font-size: 14px;\r\n}\r\n",".mftcc-layout-header {\r\n width: 100%;\r\n height: 100%;\r\n border-bottom: 1px solid #dfdfdf;\r\n background: #409EFF;\r\n}\r\n.mftcc-layout-header .middle-north-center{\r\n height: 55px; \r\n /* width: 500px; */\r\n float: right; \r\n}\r\n.mftcc-layout-header .outer-west-logo{\r\n height:55px; \r\n width: 224px; \r\n float: left;\r\n}\r\n.mftcc-layout-header .outer-west-logo img{\r\n width: 224px;\r\n}\r\n.mftcc-layout-header .middle-north-west{\r\n float: left;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding-top: 5px;\r\n}\r\n.mftcc-layout-header .middle-north-west span{\r\n color: white;\r\n font-size: 20px;\r\n position: absolute;\r\n padding: 14px 0px 0px 17px;\r\n}\r\n.mftcc-layout-header .middle-north-west img{\r\n width: 214px;\r\n}\r\n.mftcc-layout-header .middle-north-east{\r\n cursor: pointer;\r\n width: 80px; \r\n float: right; \r\n background-color:#337ECC;\r\n height: 55px;\r\n}\r\n.mftcc-layout-header .middle-north-east i{\r\n font-size: 24px;\r\n color: white;\r\n padding: 15px 28px !important;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu{\r\n float: right;\r\n background-color: transparent;\r\n height: 55px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item{\r\n color: #fff;\r\n height: 55px;\r\n font-size: 14px;\r\n line-height: 25px;\r\n padding: 10px 15px;\r\n padding-top: 15px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item:focus,.mftcc-layout-header .mftcc-header-menu .el-menu-item:hover{\r\n background-color:rgba(0, 0, 0, 0.2);\r\n color: #fff;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item.is-active{\r\n background-color: rgba(0, 0, 0, 0.2);\r\n color: #fff;\r\n border-bottom: none;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item i{\r\n float: left;\r\n width: 25px;\r\n height: 25px;\r\n margin-top: 1px;\r\n margin-right: 5px;\r\n font-size: 24px;\r\n color: #fff;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user{\r\n min-width: 208px;\r\n padding: 0px 15px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info{\r\n height: 100%;\r\n width: 100%;\r\n display: flex;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info img{\r\n width: 35px;\r\n height: 35px;\r\n border-radius: 50%;\r\n margin-top: 10px;\r\n margin-right: 12px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info span{\r\n margin-top: 15px;\r\n}\r\n.menu-user-content{\r\n padding: 0;\r\n background-color: #4a7ec3;\r\n width: 190px;\r\n margin-top: 5px !important;\r\n}\r\n.menu-user-content img{\r\n width: 55px;\r\n height: 55px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n color: #fff;\r\n}\r\n.menu-user-content .menu-user-title{\r\n padding: 20px;\r\n}\r\n.menu-user-content .menu-user-title p{\r\n color:#fff;\r\n margin: 0px 0 16px 0;\r\n display: inline-block;\r\n}\r\n.menu-user-content .popper__arrow{\r\n display: none;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message{\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:first-child{\r\n width:66.66%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:last-child{\r\n width:33.33%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-button{\r\n margin-top: 6%;\r\n width:100%;\r\n background-color: #4D4D4D;\r\n height: 45px;\r\n border-bottom-left-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n}\r\n.menu-user-content .menu-user-button button{\r\n background-color: #4D4D4D !important;\r\n font-size: 12px;\r\n width: calc(50% - 1px) !important;\r\n float: left;\r\n border: none;\r\n margin-left: 0px !important;\r\n height: 100% !important;\r\n padding: 0;\r\n}\r\n.menu-user-content .menu-user-button button:hover{\r\n background-color: #353535;\r\n}\r\n.menu-user-content .menu-user-button .el-divider{\r\n margin:0;\r\n width:2px;\r\n height: 14px;\r\n top: 14px;\r\n float: left;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval{\r\n min-width: 120px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval .menu-approval-num{\r\n float: left;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval sup{\r\n background-color: #fff;\r\n color: #000;\r\n right: 0px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-notice sup{\r\n background-color: #fff;\r\n color: #000;\r\n}","/* @import \"../../../../assets/font/font.css\"; */\r\n.mftcc-layout-header {\r\n width: 100%;\r\n height: 100%;\r\n border-bottom: 1px solid #dfdfdf;\r\n background: #409EFF;\r\n}\r\n.mftcc-layout-header .middle-north-center{\r\n height: 55px; \r\n /* width: 500px; */\r\n float: right; \r\n}\r\n.mftcc-layout-header .outer-west-logo{\r\n height:55px; \r\n width: 224px; \r\n float: left;\r\n}\r\n.mftcc-layout-header .outer-west-logo img{\r\n width: 224px;\r\n}\r\n.mftcc-layout-header .middle-north-west{\r\n float: left;\r\n height: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n padding-top: 5px;\r\n}\r\n.mftcc-layout-header .middle-north-west span{\r\n color: white;\r\n font-size: 20px;\r\n position: absolute;\r\n padding: 14px 0px 0px 17px;\r\n}\r\n.mftcc-layout-header .middle-north-west img{\r\n width: 214px;\r\n}\r\n.mftcc-layout-header .middle-north-east{\r\n cursor: pointer;\r\n width: 80px; \r\n float: right; \r\n background-color:#337ECC;\r\n height: 55px;\r\n}\r\n.mftcc-layout-header .middle-north-east i{\r\n font-size: 24px;\r\n color: white;\r\n padding: 15px 28px !important;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu{\r\n float: right;\r\n background-color: transparent;\r\n height: 55px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item{\r\n color: #fff;\r\n height: 55px;\r\n font-size: 14px;\r\n line-height: 25px;\r\n padding: 10px 15px;\r\n padding-top: 15px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item:focus,.mftcc-layout-header .mftcc-header-menu .el-menu-item:hover{\r\n background-color:rgba(0, 0, 0, 0.2);\r\n color: #fff;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item.is-active{\r\n background-color: rgba(0, 0, 0, 0.2);\r\n color: #fff;\r\n border-bottom: none;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .el-menu-item i{\r\n float: left;\r\n width: 25px;\r\n height: 25px;\r\n margin-top: 1px;\r\n margin-right: 5px;\r\n font-size: 24px;\r\n color: #fff;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user{\r\n min-width: 208px;\r\n padding: 0px 15px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info{\r\n height: 100%;\r\n width: 100%;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info img{\r\n width: 35px;\r\n height: 35px;\r\n border-radius: 50%;\r\n margin-top: 10px;\r\n margin-right: 12px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-user .menu-user-info span{\r\n margin-top: 15px;\r\n}\r\n.menu-user-content{\r\n padding: 0;\r\n background-color: #4a7ec3;\r\n width: 190px;\r\n margin-top: 5px !important;\r\n}\r\n.menu-user-content img{\r\n width: 55px;\r\n height: 55px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n color: #fff;\r\n}\r\n.menu-user-content .menu-user-title{\r\n padding: 20px;\r\n}\r\n.menu-user-content .menu-user-title p{\r\n color:#fff;\r\n margin: 0px 0 16px 0;\r\n display: inline-block;\r\n}\r\n.menu-user-content .popper__arrow{\r\n display: none;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message{\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:first-child{\r\n width:66.66%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-title .menu-user-message div:last-child{\r\n width:33.33%;\r\n float:left;\r\n}\r\n.menu-user-content .menu-user-button{\r\n margin-top: 6%;\r\n width:100%;\r\n background-color: #4D4D4D;\r\n height: 45px;\r\n border-bottom-left-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n}\r\n.menu-user-content .menu-user-button button{\r\n background-color: #4D4D4D !important;\r\n font-size: 12px;\r\n width: calc(50% - 1px) !important;\r\n float: left;\r\n border: none;\r\n margin-left: 0px !important;\r\n height: 100% !important;\r\n padding: 0;\r\n}\r\n.menu-user-content .menu-user-button button:hover{\r\n background-color: #353535;\r\n}\r\n.menu-user-content .menu-user-button .el-divider{\r\n margin:0;\r\n width:2px;\r\n height: 14px;\r\n top: 14px;\r\n float: left;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval{\r\n min-width: 120px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval .menu-approval-num{\r\n float: left;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-approval sup{\r\n background-color: #fff;\r\n color: #000;\r\n right: 0px;\r\n}\r\n.mftcc-layout-header .mftcc-header-menu .menu-notice sup{\r\n background-color: #fff;\r\n color: #000;\r\n}\r\n.mftcc-layout-menu {\r\n height: 100%;\r\n overflow-x: hidden;\r\n}\r\n.mftcc-layout-menu .menu{\r\n z-index: 100;\r\n width: 100px;\r\n min-height: 100%;\r\n overflow: hidden;\r\n background-color: #101D29;\r\n}\r\n.mftcc-layout-menu .el-scrollbar__bar {\r\n z-index: 101;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item{\r\n margin-bottom: 1px;\r\n padding: 0 !important;\r\n color: #fff;\r\n height: 60px;\r\n\twidth: 100px;\r\n line-height: initial;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -ms-flex-wrap: wrap;\r\n flex-wrap: wrap;\r\n\t-webkit-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tpadding-left:22px!important;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:hover{\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:focus{\r\n background: none;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item.is-active{\r\n position: relative;\r\n background: url(../../images/jiantou.png) no-repeat 0px -6px;\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item i{\r\n position: relative;\r\n top: 22px;\r\n display: block;\r\n font-family: 'Glyphicons Halflings';\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 1;\r\n color: #fff;\r\n font-size: 16px;\r\n width: 16px;\r\n\theight: 16px;\r\n\tfloat: left;\r\n margin: 0;\r\n\tmargin-right: 8px;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item span{\r\n font-size: 14px;\r\n text-align: center;\r\n display: block;\r\n width:auto;\r\n line-height: 60px;\r\n\tfloat: left;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu{\r\n background-color: rgb(255, 255, 255);\r\n height: calc(100% - 55px);\r\n width: 200px;\r\n position: absolute;\r\n top: 55px;\r\n left: 100px;\r\n -webkit-box-shadow: 4px 0px 4px #c0c4cc;\r\n box-shadow: 4px 0px 4px #c0c4cc;\r\n z-index: 99;\r\n overflow-y: auto;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-item{\r\n width: 90%;\r\n margin: 0 auto;\r\n border-bottom: 1px solid #F1F1F3;\r\n padding: 15px 0 15px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-mask{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute;\r\n left: 0;\r\n z-index: 98;\r\n top: 0;\r\n}\r\n.second-menu-title span{\r\n color: #333;\r\n width: 140px;\r\n text-align: left;\r\n font-size: 14px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 36px;\r\n padding-left: 15px;\r\n}\r\n.second-menu-title span:hover{\r\n color: #4a7ec3;\r\n}\r\n.three-menu-title:hover{\r\n color: #4a7ec3;\r\n}\r\n.three-menu-title {\r\n color: #333;\r\n text-align: left;\r\n font-size: 12px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 32px;\r\n margin-left: 25px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter-active,\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-active {\r\n -webkit-transition: all .3s ease;\r\n transition: all .3s ease;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter, .mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-to{\r\n -webkit-transform: translateX(-200px);\r\n transform: translateX(-200px);\r\n}\r\n/*table样式*/\r\n.mftcc-table{\r\n\t-webkit-box-flex: 1;\r\n\t -ms-flex-positive: 1;\r\n\t flex-grow: 1;\r\n\tmargin: 0 12px;\r\n\tmargin-bottom: 12px;\r\n}\r\n.mftcc-table .el-table .cell, .el-table--border td:first-child .cell, .el-table--border th:first-child .cell{\r\n\t padding-left: 16px;\r\n}\r\n/* .mftcc-table .el-table__body {\r\n background: white;\r\n border: none;\r\n} */\r\n/* .mftcc-table .el-table__body tr {\r\n line-height: 30px !important;\r\n height: 30px !important;\r\n border-bottom: none;\r\n}\r\n.mftcc-table .el-table__body tr:nth-child(even) {\r\n background: #f1f1f1;\r\n}\r\n.mftcc-table .el-table__body tr:nth-child(odd) {\r\n background: #fff;\r\n} */\r\n.mftcc-table .el-table__body tr td{\r\n\tfont-size: 14px;\r\n color: #3D3D3D;\r\n border: none;\r\n\tpadding:8px 0px;\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n/* .mftcc-table .el-table__body tr td:first-child{\r\n\tborder-left: 1px solid #E8E8E8;\r\n}\r\n.mftcc-table .el-table__body tr td:last-child{\r\n\tborder-right: 1px solid #E8E8E8;\r\n} */\r\n.mftcc-table .el-table__body tr:nth-child(even){\r\n\tbackground: #FAFAFA;\r\n}\r\n.mftcc-table .el-table__body tr td a,.mftcc-form .el-form-item a{\r\n\tcolor: #409EFF;\r\n text-decoration: none;\r\n}\r\n.mftcc-table .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n\tbackground: #E3F1FF;\r\n}\r\n.mftcc-form .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n background: transparent;\r\n}\r\n.mftcc-table .el-table__body tr.current-row>td{\r\n\tbackground: #E3F1FF;\r\n}\r\n.mftcc-table .el-form-item{\r\n margin-bottom: 0;\r\n}\r\n/* .mftcc-table .el-table__header {\r\n\tdisplay: block;\r\n\tz-index: 9;\r\n\tposition: absolute;\r\n\tbackground-color: #ffffff;\r\n\tborder:none;\r\n} */\r\n.mftcc-table .el-table th{\r\n\tcolor: #141414;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\t-webkit-box-sizing: border-box;\r\n\t box-sizing: border-box;\t\r\n \tpadding: 0 5px;\r\n\theight: 48px;\r\n line-height: 48px;\r\n /* text-align: center; */\r\n white-space: nowrap;\r\n\tcursor: default;\r\n\tbackground: #F5F5F5;\r\n\tborder-right: 1px solid #E8E8E8;\r\n border-top: 1px solid #E8E8E8;\r\n\tfont-weight: bold;\r\n}\r\n/* .mftcc-table .el-table th:first-child{\r\n\tborder-left:1px solid #E8E8E8;\r\n} */\r\n.mftcc-table .el-table th>.cell{\r\n display: block;\r\n padding-left: 14px;\r\n padding-right: 14px;\r\n}\r\n/*分页*/\r\n.mftcc-table .el-pagination{\r\n\t/* position: absolute;\r\n bottom: 4px; \r\n width: 100%;*/\r\n\tbackground: #FAFAFA;\r\n\tpadding: 0px;\r\n\ttext-align: right;\r\n\tpadding-right: 10px;\r\n\tmargin: 0px !important;\r\n\tpadding-left: 10px;\r\n\theight: 40px;\r\n}\r\n.mftcc-table .el-pagination .el-pagination__total,.mftcc-table .el-pagination .el-pagination__sizes{\r\n\tfloat: left;\r\n\tfont-size: 12px;\r\n}\r\n.mftcc-table .el-pagination.is-background .el-pager li:not(.disabled){\r\n\tcolor: #141414;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\theight: 40px;\r\n line-height: 40px;\r\n}\r\n.mftcc-table .el-pagination__editor.el-input{\r\n\tmargin: 0 5px;\r\n}\r\n.mftcc-table .el-pagination__editor.el-input .el-input__inner{\r\n\twidth: 48px;\r\n height: 28px;\r\n background: #FFFFFF;\r\n border-radius: 2px;\r\n border: 1px solid #E8E8E8;\r\n}\r\n.mftcc-table .el-input--mini .el-input__inner{\r\n\twidth: 84px;\r\n height: 28px;\r\n background: #FFFFFF;\r\n border-radius: 2px !important;\r\n border: 1px solid #E8E8E8;\r\n font-size: 12px;\r\n}\r\n.mftcc-table .el-pagination .el-pagination__jump{\r\n\tfont-size: 12px !important;\r\n color: #3D3D3D;\r\n}\r\n.mftcc-table .el-pagination button, .el-pagination span:not([class*=suffix]){\r\n\theight: 40px;\r\n line-height: 40px;\r\n}\r\n.el-pagination.is-background .btn-next, .el-pagination.is-background .btn-prev, .el-pagination.is-background .el-pager li{\r\n\tbackground-color: transparent;\r\n\tfont-size: 12px;\r\n\tcolor: #141414;\r\n\tmin-width: 25px;\r\n}\r\n.mftcc-table .el-pagination.is-background .el-pager li:not(.disabled).active{\r\n\tcolor: #409EFF;\r\n\tbackground: none;\r\n}\r\n.mftcc-table .is-disabled .el-input__inner,.mftcc-table .is-disabled .el-textarea__inner{\r\n\tbackground-color: #F5F7FA !important;\r\n border-color: #E4E7ED !important;\r\n color: #C0C4CC !important;\r\n cursor: not-allowed !important;\r\n}\r\n.mftcc-table .el-table__row .el-button--default{\r\n background: none;\r\n\tborder: none;\r\n\tcolor: #409EFF;\r\n\tpadding: 5px 0px;\r\n\tmin-width: auto;\r\n height: auto;\r\n}\r\n.mftcc-table .el-table__row .el-button--default:hover{\r\n background-color: transparent;\r\n}\r\n.mftcc-table .el-table__row .el-button--default:first-child{\r\n\tmargin-left: 0px;\r\n}\r\n.mftcc-table .el-table__row .el-button--default.is-disabled{\r\n\tcolor: #C0C4CC;\r\n\tcursor: pointer;\r\n}\r\n/* talbe样式结束 */\r\n/* 可编辑table样式开始 */\r\n.mftcc-edit-table{\r\n\tmargin: 0px 20px 0px 20px;\r\n \twidth: auto !important;\r\n}\r\n.mftcc-edit-table .el-table__body tr td{\r\n\tfont-size: 12px;\r\n color: #575757;\r\n border: 0px solid #e9ebf2;\r\n\tpadding:4px 0px;\r\n\tborder-bottom: 1px solid #eee;\r\n}\r\n.mftcc-edit-table .el-table__body tr td a{\r\n\t color: #4a7ec3;\r\n text-decoration: none;\r\n}\r\n.mftcc-edit-table .el-table__body tbody tr:hover {\r\n background-color: #d6f0f5 !important;\r\n}\r\n.mftcc-edit-table .el-table th{\r\n\tcolor: #7e8ea4;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\t-webkit-box-sizing: border-box;\r\n\t box-sizing: border-box;\t\r\n \tpadding: 0 5px;\r\n\theight: 41px;\r\n line-height: 41px;\r\n white-space: nowrap;\r\n\tcursor: default;\r\n\tbackground: #EDF2FA;\r\n\tborder:1px solid rgba(225,226,227,1);\r\n\tfont-weight: bold;\r\n}\r\n.mftcc-edit-table .el-table th>.cell{\r\n\tdisplay: block;\r\n}\r\n/*分页*/\r\n.mftcc-edit-table .el-pagination{\r\n\tbackground: #fff;\r\n\ttext-align: right;\r\n\tpadding-right: 10px;\r\n\tmargin-top: 10px !important;\r\n}\r\n.mftcc-edit-table .el-pagination .el-pagination__total,.mftcc-edit-table .el-pagination .el-pagination__sizes{\r\n\tfloat: left;\r\n}\r\n.mftcc-edit-table .el-pagination.is-background .el-pager li:not(.disabled).active{\r\n\tbackground: #4a7ec3;\r\n}\r\n.mftcc-edit-table .el-table__row .el-button--default{\r\n background: none;\r\n\tborder: none;\r\n\tcolor: #4a7ec3;\r\n\tpadding: 10px 0px;\r\n}\r\n.mftcc-edit-table .el-table__row .el-button--default.is-disabled{\r\n\tcolor: #C0C4CC;\r\n\tcursor: pointer;\r\n}\r\n/* 可编辑table样式结束 */\r\n/*表单样式*/\r\n.mftcc-form .el-form-item{\r\n\tmargin-bottom: 0;\r\n\tpadding-left: 0px !important;\r\n\tpadding-right: 0px !important;\r\n\tbackground: #F5F5F5;\r\n\theight: 100%;\r\n\tborder-right: 1px solid #E8E8E8;\r\n\tmin-height: 48px;\r\n}\r\n.mftcc-form .el-form-item.mftcc-form-empty{\r\n\tbackground: transparent;\r\n}\r\n.mftcc-form .el-form-item__label{\r\n\t/* width: 35% !important; */\r\n\tpadding: 3px 12px;\r\n line-height:34px;\r\n\tvertical-align: middle;\r\n\theight: 100%;\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n\t-webkit-box-align: center;\r\n\t -ms-flex-align: center;\r\n\t align-items: center;\r\n\tmargin-top: 0px;\r\n\tcolor: #141414;\r\n}\r\n.mftcc-form.el-form--label-right .el-form-item__label{\r\n\t-webkit-box-pack: end;\r\n\t -ms-flex-pack: end;\r\n\t justify-content: flex-end;\r\n}\r\n.mftcc-form .el-table__body tr td:first-child .el-form-item{\r\n\tborder-left: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form .el-form-item__content{\r\n\t/* margin-left: 35% !important; */\r\n\tbackground: #fff;\r\n\t/* border-right: 1px solid #E8E8E8; */\r\n\tborder-left: 1px solid #E8E8E8;\r\n\tposition: relative;\r\n\tright:1px;\r\n\t padding: 0px;\r\n\t height: 100%;\r\n}\r\n.mftcc-form.el-form--label-top .el-form-item__label{\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form.el-form--label-top .el-form-item__label,.mftcc-form.el-form--label-top .el-form-item__content{\r\n\theight: 50%;\r\n\tmin-height: 48px;\r\n}\r\n.mftcc-form .el-table__body td{\r\n\t border-top: 1px solid #E8E8E8;\r\n\t height: 0px;\r\n}\r\n.mftcc-form .el-table__body{\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form .mftcc-form-group .el-col .el-form-item__content{\r\n\tmargin: 0px !important;\r\n border: none;\r\n padding: 0px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item{\r\n\tbackground:none;\r\n}\r\n.mftcc-form .el-table__body td{\r\n\tbackground: #fff;\r\n}\r\n/* .mftcc-form .el-form-item.mftcc-form-empty,\r\n.mftcc-form .el-form-item.mftcc-form-empty .el-form-item__label,\r\n.mftcc-form .el-form-item.mftcc-form-empty .el-form-item__content{\r\n\tbackground:none;\r\n\tborder: none;\r\n} */\r\n.mftcc-form .el-date-editor.el-input, .mftcc-form .el-date-editor.el-input__inner {\r\n width: 100%;\r\n}\r\nsection.el-container{\r\n\tborder: none!important;\r\n}\r\n.mftcc-form .el-input__inner{\r\n\tborder: none;\r\n\theight: 100% !important;\r\n}\r\n.mftcc-form .el-textarea__inner{\r\n\tborder: none;\r\n\t/* height: 40px; */\r\n\toutline:none;\r\n\tresize:none;\r\n}\r\n.mftcc-form .el-checkbox-group,\r\n.mftcc-form .el-radio-group,\r\n.mftcc-form .el-switch{\r\n\tpadding: 0 15px;\r\n line-height: 25px;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.mftcc-form .el-input__suffix{\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n}\r\n.mftcc-form .el-radio{\r\n\tline-height: 34px;\r\n}\r\n.el-scrollbar__wrap{\r\n overflow: auto;\r\n margin: 0 !important;\r\n}\r\n.mftcc-form .el-alert--success.is-dark{\r\n\theight: 48px;\r\n\tpadding: 8px;\r\n\tborder-left: 1px solid #E8E8E8;\r\n\tborder-right: 1px solid #E8E8E8;\r\n\tborder-radius: 0;\r\n\tbackground: rgba(64, 158, 255, 0.15) !important;\r\n}\r\n.mftcc-form .el-alert--success.is-dark .el-alert__title{\r\n\tfont-size:14px;\r\n\tcolor:#141414;\r\n}\r\n.mftcc-form .el-form-item__error {\r\n\ttop: auto;\r\n left: auto;\r\n right: 16px;\r\n z-index: 99;\r\n bottom: 18px;\r\n}\r\n.mftcc-form .mftcc-form-group .el-form-item__error {\r\n\ttop: auto;\r\n left: 15px;\r\n z-index: 99;\r\n bottom: -13px;\r\n}\r\n.mftcc-form .el-table .cell{\r\n\tpadding: 0px;\r\n}\r\n.mftcc-form .el-table .cell,\r\n.mftcc-form .el-table .cell>div,\r\n.mftcc-form .mftcc-form-item,\r\n.mftcc-form .el-input,\r\n.mftcc-form .el-textarea,\r\n.mftcc-form .el-select,\r\n.mftcc-form .el-cascader,\r\n.mftcc-form .mftcc-dailog{\r\n\theight: 100%;\r\n}\r\n.mftcc-form .mftcc-dailog{\r\n width: 100%;\r\n}\r\n.mftcc-form .el-form-item__content .el-input{\r\n height: calc(100% - 4px);\r\n margin-top: 2px;\r\n\tborder: 1px solid transparent;\r\n}\r\n.mftcc-form .el-form-item__content .el-select .el-input,.mftcc-form .el-form-item__content .el-cascader .el-input{\r\n\tmargin-top: 0px;\r\n}\r\n.mftcc-form .el-form-item__content .el-textarea{\r\n\tborder: 1px solid transparent;\r\n}\r\n.mftcc-form .el-form-item__content .el-input.is-disabled,\r\n.mftcc-form .el-form-item__content .el-textarea.is-disabled,\r\n\r\n.mftcc-form .is-disabled .el-form-item__content .el-input,\r\n.mftcc-form .is-disabled .el-form-item__content .el-textarea{\r\n height: 100%;\r\n border: none !important;\r\n -webkit-box-shadow: none !important;\r\n box-shadow: none !important;\r\n}\r\n.mftcc-form .el-form-item__content>.el-select,.mftcc-form .el-form-item__content>.el-cascader,.mftcc-form .el-form-item__content>.mftcc-dailog{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n}\r\n.mftcc-form .el-form-item__content .el-input:hover,\r\n.mftcc-form .el-form-item__content .el-textarea:hover{\r\n border: 1px solid #409EFF;\r\n -webkit-box-shadow: 0px 0px 5px 0px #409EFF;\r\n box-shadow: 0px 0px 5px 0px #409EFF;\r\n}\r\n.mftcc-form .el-form-item__content .el-select__tags,.mftcc-form .el-form-item__content .el-cascader__tags{\r\n pointer-events: none;\r\n}\r\n.mftcc-form .el-form-item__content .el-select__tags>span,.mftcc-form .el-form-item__content .el-cascader__tags>span{\r\n pointer-events: auto;\r\n}\r\n.mftcc-form .el-select .el-select__tags,.mftcc-form .el-cascader .el-cascader__tags{\r\n\tpadding: 5px 0;\r\n max-width: none !important;\r\n position: relative;\r\n height: 100%;\r\n}\r\n.mftcc-form .el-select .el-select__tags + .el-input,.mftcc-form .el-cascader>.el-input{\r\n position: absolute;\r\n top: 2px;\r\n left: 0px;\r\n}\r\n.mftcc-form .el-cascader .el-cascader__search-input{\r\n background-color: transparent;\r\n}\r\n/* 弹层table样式 */\r\n.mftcc-table-dialog .el-dialog__body{\r\n\tpadding-top: 10px;\r\n}\r\n.mftcc-table-dialog .mftcc-search-form{\r\n\tpadding: 0 20px;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content{\r\n\tpadding-top: 20px;\r\n}\r\n/* 弹层table样式结束 */\r\n/* 列表按钮样式开始 */\r\n.mftcc-form-buttom{\r\n\tpadding: 8px 12px;\r\n position: relative;\r\n\ttext-align: right;\r\n\tmargin: 0 12px;\r\n background: #FFF;\r\n}\r\n.mftcc-form-buttom.queryModel>span{\r\n\tfloat: left;\r\n font-size: 18px;\r\n line-height: 30px;\r\n display: block;\r\n}\r\n/* .mftcc-form-buttom button,.mftcc-form-tools button{\r\n\tbackground-color: #409EFF;\r\n color: #FFFFFF;\r\n border: none;\r\n\tborder-radius: 4px;\r\n\tmargin-left: 10px;\r\n\tmin-width: 68px;\r\n\theight: 32px;\r\n\tpadding: 0;\r\n} */\r\n.mftcc-form-buttom .sysBtns button,.mftcc-form-tools .sysBtns button{\r\n\tbackground-color: #fff;\r\n\tcolor: #409EFF;\r\n\tborder: 1px solid rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-form-buttom .sysBtns button:hover, .mftcc-form-tools .sysBtns button:hover{\r\n\tbackground: rgba(64, 158, 255, 0.15);\r\n\tborder-radius: 4px;\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .mftcc-form-tools-item{\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n}\r\n.mftcc-form-buttom>button:first-child{\r\n\tmargin-left: 0px;\r\n}\r\n.mftcc-form-buttom.queryModel .sysBtns{\r\n\tdisplay: inline-block;\r\n\tmargin-right: 20px;\r\n}\r\n.mftcc-form-buttom.dynamicModel{\r\n\ttext-align: left;\r\n\tmargin-bottom: 1px;\r\n\tmargin-top: 12px;\r\n}\r\n/* .mftcc-form-buttom.dynamicModel button{\r\n\tpadding: 6px 12px;\r\n\tpadding-left: 20px;\r\n background-color: #4A7EC3;\r\n\tbackground:#4A7EC3 url(../../images/Group23.png) no-repeat 8px center ;\r\n color: #FFFFFF;\r\n\theight: 28px;\r\n\twidth: 68px;\r\n\ttext-align: center;\r\n\tmargin-left: 0;\r\n margin-right: 10px;\r\n} */\r\n/* .mftcc-form-buttom.dynamicModel button:hover{\r\n\t background-color: #36629C;\r\n} */\r\n/* 列表按钮样式结束 */\r\n/* 列表工具栏样式开始 */\r\n.mftcc-form-tools{\r\n\tpadding: 8px 12px;\r\n position: relative;\r\n\tmargin: 0 12px;\r\n\tbackground: #FFF;\r\n\tdisplay: -webkit-box;\r\n\tdisplay: -ms-flexbox;\r\n\tdisplay: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: justify;\r\n -ms-flex-pack: justify;\r\n justify-content: space-between;\r\n}\r\n.mftcc-form-tools>.mftcc-form-tools-item>div{\r\n\tdisplay: inline-block;\r\n}\r\n.mftcc-form-tools .el-tabs__header{\r\n\tmargin: 0;\r\n}\r\n.mftcc-form-tools .el-tabs__item{\r\n\tpadding: 0px 12px;\r\n text-align: center;\r\n\tfont-size: 14px;\r\n\tcolor: #3D3D3D;\r\n}\r\n.mftcc-form-tools .el-tabs__item:hover{\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__item.is-active{\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__active-bar{\r\n\tbackground-color: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__nav-wrap::after{\r\n\theight: 0px;\r\n}\r\n.mftcc-form-tools .el-input__inner{\r\n\twidth: 230px;\r\n height: 32px;\r\n background: #FFFFFF;\r\n border-radius: 2px;\r\n border: 1px solid #CCCCCC;\r\n line-height: 32px;\r\n}\r\n.mftcc-form-tools .el-input__inner:hover{\r\n\tborder: 1px solid #409EFF;\r\n}\r\n.mftcc-form-tools .el-input__suffix{\r\n\twidth: 30px;\r\n height: 30px;\r\n background: rgba(64, 158, 255, 0.15);\r\n border-radius: 0px 2px 2px 0px;\r\n border: 1px solid rgba(64, 158, 255, 0.45);\r\n margin-right: -5px;\r\n font-size: 12px;\r\n color: #409EFF;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n\t-webkit-box-align: center;\r\n\t -ms-flex-align: center;\r\n\t align-items: center;\r\n\tcursor: pointer;\r\n}\r\n.mftcc-form-tools .el-input__icon.el-icon-search{\r\n\tcursor: pointer;\r\n}\r\n.mftcc-form-tools .el-input__icon.el-input__validateIcon{\r\n\tdisplay: none;\r\n}\r\n/* 列表工具栏样式结束 */\r\n.mftcc-details .el-card__body{\r\n padding: 12px;\r\n}\r\n/*单独显示label开始 */\r\n.mftcc-form-item .only-label .el-form-item__label{\r\n width: 100%!important;\r\n}\r\n.mftcc-form-item .only-label .el-form-item__content{\r\n display: none;\r\n}\r\n/*单独显示label结束 */\r\n/*单独显示input开始 */\r\n.mftcc-form-item .only-input .el-form-item__label{\r\n display: none;\r\n}\r\n.mftcc-form-item .only-input .el-form-item__content{\r\n width: 100%!important;\r\n margin-left:0px!important;\r\n}\r\n/*单独显示input结束 */\r\n.mftcc-form-item .mftcc-form-empty .el-form-item__label{\r\n display: none;\r\n}\r\n.mftcc-form-item .mftcc-form-empty .el-form-item__content{\r\n display: none;\r\n}\r\n/* tooltip样式 开始*/\r\n.el-tooltip__popper.is-dark{\r\n color: #3D3D3D;\r\n -webkit-box-shadow: 0px 0px 4px 0px #409eff;\r\n box-shadow: 0px 0px 4px 0px #409eff;\r\n background: #e3f1ff;\r\n line-height: 24px;\r\n font-size: 14px;\r\n}\r\n.el-tooltip__popper[x-placement^=top] .popper__arrow{\r\n border-top-color: rgb(64 158 255 / 47%);\r\n}\r\n.el-tooltip__popper[x-placement^=top] .popper__arrow::after{\r\n border-top-color: #e3f1ff;\r\n}\r\n/* tooltip样式 结束*/\r\n/*table样式*/\r\n/* .mftcc-table-query .el-table__body {\r\n background: white;\r\n table-layout: auto;\r\n padding-top: 48px;\r\n} */\r\n/* .mftcc-table-query .el-table__body tr {\r\n height: 41px;\r\n line-height: 41px;\r\n font-size: 14px;\r\n color: #7f7f7f;\r\n background: #ffffff;\r\n border-bottom: 1px solid #f3f3f3;\r\n} */\r\n.mftcc-table-query .el-table__body tr td{\r\n border: none !important;\r\n padding: 0px 0px !important;\r\n line-height: 41px;\r\n vertical-align: center;\r\n color: #3d3d3d;\r\n}\r\n.mftcc-table-query .el-table__body tr:nth-child(even) td{\r\nbackground: #fafafa;\r\n}\r\n.mftcc-table-query .el-table__body tr td a{\r\n color: #4a7ec3;\r\n text-decoration: none;\r\n}\r\n.mftcc-table-query .el-table--enable-row-hover .el-table__body tr:hover>td,\r\n.mftcc-table-query .el-table__body tr.hover-row.current-row>td, \r\n.mftcc-table-query .el-table__body tr.hover-row.el-table__row--striped.current-row>td, \r\n.mftcc-table-query .el-table__body tr.hover-row.el-table__row--striped>td, \r\n.mftcc-table-query .el-table__body tr.hover-row>td{\r\nbackground-color: #E3F2FD !important;\r\n}\r\n/* .mftcc-table-query .el-table__header {\r\ndisplay: block;\r\nz-index: 9;\r\nposition: absolute;\r\nbackground-color: #ffffff;\r\n} */\r\n.mftcc-table-query .el-table tr{\r\nheight: 36px;\r\n line-height: 36px;\r\n border-bottom: 1px solid #e9ebf2;\r\n color: #000000;\r\n}\r\n/* .mftcc-table-query .el-table tr:hover th{\r\n background-color: #E3F2FD !important;\r\n} */\r\n.mftcc-table-query .el-table th{\r\nfont-size: 14px;\r\n font-weight: normal;\r\n color: #3D3D3D;\r\n padding: 0px;\r\n background-color: rgba(64, 158, 255, 0.06);\r\nborder:none;\r\n \r\n}\r\n.mftcc-table-query .el-dropdown-DColumn{\r\n position: absolute;\r\n z-index: 10;\r\n top: 10px;\r\n right: 5px;\r\n}\r\n/*分页*/\r\n.mftcc-table-query .el-pagination{\r\n/* position: absolute;\r\n bottom: 4px; \r\n width: 100%;*/\r\nbackground: #fff;\r\n/* padding: 0px; */\r\ntext-align: right;\r\npadding-right: 10px;\r\nmargin-top: 10px !important;\r\n}\r\n.mftcc-table-query .el-pagination .el-pagination__total,.mftcc-table-query .el-pagination .el-pagination__sizes{\r\nfloat: left;\r\n}\r\n.mftcc-table-query .el-pagination.is-background .el-pager li:not(.disabled).active{\r\nbackground: #4a7ec3;\r\n}\r\n.mftcc-table-query .el-table__row .el-button--default{\r\nbackground-color: transparent !important;\r\nborder: none;\r\ncolor: #409EFF;\r\npadding: 10px 0px;\r\n}\r\n/*表单样式*/\r\n.mftcc-form-query .el-form-item{\r\nmargin-bottom: 0px;\r\npadding-left: 0px !important;\r\n padding-right: 0px !important;\r\n}\r\n.mftcc-form-query .el-col{\r\n background: #fff;\r\n}\r\n/* .mftcc-form-query .el-col:nth-child(4n+1),.mftcc-form-query .el-col:nth-child(4n+1){\r\n clear:left;\r\n} */\r\nsection.el-container{\r\nborder: none!important;\r\n}\r\n.mftcc-form-query .el-input.is-disabled .el-input__inner{\r\nborder: none;\r\nbackground: none;\r\n color: #666;\r\n cursor: text;\r\n line-height: 20px;\r\n height: 20px;\r\n padding: 0 10px;\r\n}\r\n.mftcc-form-query .el-form-item__content,.mftcc-form-query .el-form-item__label{\r\npadding-left: 10px;\r\nwidth: 100%;\r\nline-height: 36px;\r\nheight: 36px;\r\nborder-bottom: none;\r\n}\r\n.mftcc-form-query .el-table__body{\r\nborder: none;\r\nborder-bottom: 0;\r\n}\r\n.mftcc-form-query .el-table__body .el-alert--success.is-dark{\r\nbackground: #EDF2FA;\r\nmargin-bottom: 0 !important;\r\nborder-bottom: 1px solid #E1E2E3;\r\nborder-right:1px solid #E1E2E3;\r\nborder-left:1px solid #E1E2E3;\r\nborder-radius: 0;\r\nposition: relative;\r\nleft: 1px;\r\ncolor: #3D3D3D;\r\n\r\n}\r\n.mftcc-table-query .el-table__header,.mftcc-table-query .el-table__body{\r\nborder: none;\r\n}\r\n.mftcc-form-query .el-table__body tr:last-child td .el-form-item__content:last-child,.mftcc-form-query .el-table__body tr:last-child td .el-form-item__content:last-child .el-form-item__label{\r\nborder-bottom: 0;\r\n}\r\n/* .mftcc-form-query .el-table__body td:last-child{\r\nborder-right: 1px solid #E1E2E3;\r\nposition: relative;right: 2px;\r\n} */\r\n.mftcc-form-query .el-checkbox.is-disabled,.mftcc-form-query .el-radio.is-disabled{\r\ndisplay: none;\r\nmargin-right: 0;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked,.mftcc-form-query .el-radio.is-disabled.is-checked{\r\ndisplay: inline-block;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__input,.mftcc-form-query .el-radio.is-disabled.is-checked .el-radio__input{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__label,.mftcc-form-query .el-radio.is-disabled.is-checked .el-radio__label{\r\ndisplay: block;\r\ncolor: #666;\r\ncursor: text;\r\npadding-left: 0;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__label:after{\r\ncontent: \"|\";\r\nmargin: 0 6px;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled[class~='is-checked']:last-of-type .el-checkbox__label:after{\r\ncontent: \"\";\r\n}\r\n.mftcc-form-query .el-textarea__inner{\r\nborder: none;\r\nresize: none;\r\n}\r\n.mftcc-form-query .el-input.is-disabled .el-input__icon{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-input--prefix .el-input__inner{\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-radio{\r\nline-height: 34px;\r\n}\r\n.mftcc-form-query .el-checkbox-group,.mftcc-form-query .el-radio-group{\r\npadding-left: 10px;\r\n}\r\n.el-scrollbar__wrap{\r\noverflow: auto;\r\n}\r\n.mftcc-form-query.el-form--label-top .el-form-item__label{\r\nposition: relative;\r\nline-height: 36px;\r\npadding-bottom: 0;\r\npadding-left: 10px;\r\nwidth: 100%;\r\nbackground: #FAFAFA;\r\nborder-bottom: none;\r\ncolor: #3D3D3D;\r\n\r\n}\r\n.mftcc-form-query .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n background-color: transparent !important;\r\n}\r\n.mftcc-form-query.el-form--label-top .el-form-item__label\r\n.mftcc-form-query.el-form--label-top .el-form-item__label:before{\r\nleft: 0px!important;\r\nposition: absolute;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled:after{\r\ncontent: \"否\";\r\ncolor: #666;\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled{\r\nopacity: 1;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled.is-checked:after{\r\ncontent: \"是\";\r\n}\r\n.mftcc-form-query .el-switch.is-disabled .el-switch__core{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-textarea.is-disabled .el-textarea__inner{\r\nbackground: none;\r\ncursor: text;\r\n}\r\n.mftcc-form-query .el-form-item__content{\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-form-item__content span{\r\npadding-right: 20px;\r\ndisplay: block;\r\ncolor: #3D3D3D;\r\noverflow: hidden;\r\n text-overflow: ellipsis;\r\nwhite-space: nowrap;\r\n}\r\n.mftcc-form-query .el-table .cell{\r\npadding: 0px;\r\nheight: 100%;\r\n}\r\n.mftcc-form-search{\r\n padding: 8px 12px;\r\n margin: 12px;\r\n margin-bottom: 1px;\r\n background-color: #FFF;\r\n width: auto;\r\n}\r\n.mftcc-form-search .el-form-item {\r\n margin-bottom: 0px;\r\n}\r\n.mftcc-form-search .el-form-item__content input{\r\n\theight: 34px;\r\n}\r\n.mftcc-form-search .el-range-editor .el-range-input{\r\n height: 32px;\r\n}\r\n.mftcc-form-search .el-date-editor .el-range-separator{\r\n height: 34px;\r\n line-height: 34px;\r\n white-space: nowrap;\r\n}\r\n.mftcc-form-search .el-date-editor .el-range__close-icon{\r\n display: none;\r\n}\r\n.mftcc-form-search .el-form-item__label{\r\n width: 35% !important;\r\n}\r\n.mftcc-form-search .el-form-item__content{\r\n\tmargin-left: 35% !important;\r\n}\r\n.mftcc-form-search .el-date-editor{\r\n width: 100%;\r\n}\r\n.mftcc-form-search .el-table .cell{\r\n\tpadding: 0px;\r\n}\r\n.mftcc-form-search .widgets{\r\n padding: 0px;\r\n margin: 0;\r\n}\r\n.mftcc-form-search .search-button button {\r\n background-color: #409EFF;\r\n border: none;\r\n border-radius: 0px;\r\n height: 100%;\r\n float: right;\r\n padding: 10px 20px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table .isExpand.el-table--enable-row-hover .mftcc-form-expand .el-table__body tr:hover>td{\r\n background: #F3F9FF;\r\n}\r\n.mftcc-table .isExpand .mftcc-form-expand .el-table__body tr:nth-child(even){\r\n background: none;\r\n}\r\n.mftcc-table .isExpand .mftcc-form-expand .el-table__body tr td{\r\n border:none;\r\n}\r\n/* .mftcc-table .mftcc-form-expand .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{\r\n content:\"\"\r\n} */\r\n.mftcc-table .isExpand .el-form-item__label{\r\n color: #99a9bf;\r\n}\r\n.mftcc-table .isExpand .el-form-item__content{\r\n color: #606266;\r\n padding-left: 12px;\r\n}\r\n.mftcc-table .isExpand .el-table__expanded-cell:hover{\r\n background-color: #FFFFFF !important;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-form-item__label{\r\n line-height: 30px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input__inner,.mftcc-table .isExpand .expandEditForm .el-input__icon,.mftcc-table .isExpand .expandEditForm .el-form-item__content{\r\n height: 30px;\r\n line-height: 30px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input,.mftcc-table .isExpand .expandEditForm .el-textarea{\r\n width: 250px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-table__body tr td{\r\n padding: 4px 0;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-tag--small{\r\n height: 20px;\r\n line-height: 20px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-select .el-tag__close.el-icon-close{\r\n top: -1px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input__inner:hover, .mftcc-table .isExpand .expandEditForm .el-textarea__inner:hover, .mftcc-table .isExpand .expandEditForm .el-select:hover .el-input__inner {\r\n border: 1px solid #409EFF;\r\n -webkit-box-shadow: 0px 0px 5px 0px #409EFF;\r\n box-shadow: 0px 0px 5px 0px #409EFF;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-form-item__error{\r\n top: 5px;\r\n left: 275px;\r\n}\r\nbody,\r\ntd,\r\nth {\r\n font-family: \"Helvetica Neue\", Helvetica, \"PingFang SC\", \"Hiragino Sans GB\",\r\n \"Microsoft YaHei\", \"微软雅黑\", Arial, sans-serif;\r\n}\r\n.el-header,\r\n.el-footer {\r\n color: #333;\r\n text-align: center;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n.el-main {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n color: #333;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n height: 100%;\r\n padding: 0px;\r\n}\r\n.el-main > .pt,\r\n#app > .pt {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n width: 100%;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\nhtml,\r\nbody,\r\n#app,\r\n.el-container.is-vertical {\r\n padding: 0px;\r\n margin: 0px;\r\n height: 100%;\r\n overflow: hidden;\r\n}\r\n.el-loading-mask.is-fullscreen {\r\n z-index: 9999 !important;\r\n}\r\n#app {\r\n overflow: auto;\r\n}\r\n.el-container {\r\n height: 100%;\r\n}\r\n.el-container.mftcc-main-el-containner {\r\n height: calc(100% - 55px) !important;\r\n}\r\n/* 悬浮菜单 开始 */\r\n.mftcc-fixed-drawer {\r\n top: 55px;\r\n}\r\n.mftcc-fixed-drawer .el-drawer__header {\r\n padding: 0;\r\n}\r\n.mftcc-fixed-drawer .mftcc-fixed-menu-mark {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.mftcc-fixed-drawer .mftcc-main-drawer {\r\n width: 80px;\r\n background-color: #ffffff;\r\n -webkit-box-shadow: -4px 0px 8px 4px rgba(0, 0, 0, 0.08);\r\n box-shadow: -4px 0px 8px 4px rgba(0, 0, 0, 0.08);\r\n}\r\n.mftcc-fixed-drawer .mftcc-main-drawer .mftcc-fixed-menu {\r\n display: block;\r\n top: 10px;\r\n position: absolute;\r\n height: 100%;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item {\r\n width: 80px;\r\n height: 70px;\r\n margin: 5px 0px;\r\n position: relative;\r\n font-size: 14px;\r\n color: #141414;\r\n text-align: center;\r\n cursor: pointer;\r\n border-bottom: 1px solid #e8e8e8;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item:hover {\r\n color: #409eff;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item\r\n i {\r\n margin: 0px 10px;\r\n height: 30px;\r\n line-height: 30px;\r\n font-size: 20px;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item\r\n span {\r\n display: block;\r\n}\r\n/* 悬浮菜单 结束*/\r\n/* 悬浮菜单进入动画 开始 */\r\n/* .mftcc-fixed-menu-transition-enter-active {\r\n transition: all .50s ease;\r\n}\r\n.mftcc-fixed-menu-transition-enter {\r\n transform: translateX(80px);\r\n} */\r\n.mftcc-fixed-menu-transition-enter-active {\r\n -webkit-transition: right 0.5s ease;\r\n transition: right 0.5s ease;\r\n}\r\n.mftcc-fixed-menu-transition-enter {\r\n right: -80px;\r\n}\r\n.mftcc-fixed-menu-transition-enter-to {\r\n right: 0px;\r\n}\r\n/* 悬浮菜单进入动画 结束*/\r\n/* 动态列表页面样式开始 */\r\n.mftcc-list .mftcc-dynamic-insert-div {\r\n padding: 10px;\r\n border-bottom: 1px solid #ddd;\r\n}\r\n.mftcc-list .mftcc-dynamic-insert-div .el-button--primary {\r\n padding: 6px 10px;\r\n}\r\n.mftcc-list .dynamic-table {\r\n margin: 0;\r\n}\r\n/* 动态列表页面样式开始 */\r\n/* 列表页面样式开始 */\r\n.mftcc-list {\r\n background-color: #f2f2f4;\r\n}\r\n.mftcc-list .mftcc-dynamic-form {\r\n padding: 0;\r\n padding-bottom: 20px;\r\n margin: 0px 10px;\r\n background: none;\r\n}\r\n.mftcc-list .mftcc-search-form {\r\n padding: 20px 20px;\r\n margin: 10px 10px;\r\n background-color: #fff;\r\n}\r\n.mftcc-list .mftcc-search-form .el-row {\r\n width: 100%;\r\n}\r\n.mftcc-list .mftcc-list-table {\r\n background-color: #fff;\r\n margin: 0 10px 10px;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-orient: vertical;\r\n -webkit-box-direction: normal;\r\n -ms-flex-direction: column;\r\n flex-direction: column;\r\n -webkit-box-flex: 1;\r\n -ms-flex-positive: 1;\r\n flex-grow: 1;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div {\r\n padding: 14px 0px 14px 20px;\r\n /* \tborder-bottom: 1px solid #e3e3e3; */\r\n position: relative;\r\n text-align: right;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div > span {\r\n float: left;\r\n font-size: 18px;\r\n line-height: 30px;\r\n display: block;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div .mftcc-insert-button {\r\n background-color: #fff;\r\n border-radius: 0px;\r\n color: #aaa;\r\n height: 36px;\r\n border: 1px solid #ddd;\r\n padding: 6px 18px;\r\n margin-right: 22px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-list .mftcc-search-form .search-button button {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n border-radius: 0px;\r\n height: 100%;\r\n float: right;\r\n padding: 10px 20px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-list .mftcc-search-form .custom-search {\r\n width: 100%;\r\n}\r\n/* 列表页面样式结束 */\r\n.mftcc-form-header {\r\n font-size: 14px;\r\n width: 100%;\r\n padding-top: 0;\r\n background: #fff;\r\n line-height: 46px;\r\n text-align: left;\r\n padding-left: 15px;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n border-bottom: 1px solid #e8e8e8;\r\n color: #141414;\r\n}\r\n.mftcc-tab .mftcc-container .mftcc-form-header {\r\n border: none;\r\n}\r\n.mftcc-tab .el-tabs__header {\r\n margin-bottom: 5px;\r\n}\r\n/* 按钮样式开始 */\r\n.el-button--primary {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n border-radius: 0px;\r\n padding: 10px 20px;\r\n}\r\n.el-button--primary:hover {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n}\r\n.el-button--default {\r\n border-radius: 0px;\r\n padding: 10px 20px;\r\n}\r\n/* 按钮样式结束 */\r\n/*tab样式开始*/\r\n.mftcc-tab {\r\n height: calc(100% - 50px);\r\n}\r\n.mftcc-tab .el-tabs.el-tabs--top {\r\n height: calc(100% - 58px);\r\n}\r\n/* 头部全局样式开始 */\r\n.el-page-header {\r\n padding-left: 10px;\r\n line-height: 50px;\r\n border-bottom: 1px solid #e1e2e3;\r\n color: #666;\r\n}\r\n.el-page-header__left::after {\r\n width: 0;\r\n}\r\n/* 头部全局样式结束 */\r\n.mftcc-tab .el-tabs__nav-wrap {\r\n padding: 0 10px;\r\n}\r\n.mftcc-tab .el-tabs__item.is-active {\r\n color: #4a7ec3;\r\n font-size: 14px;\r\n padding: 0 20px !important;\r\n top: 0;\r\n}\r\n.mftcc-tab .el-tabs__active-bar {\r\n background-color: #4a7ec3;\r\n padding: 0 20px;\r\n left: -20px;\r\n bottom: 0px;\r\n}\r\n.mftcc-tab .el-tabs__item {\r\n font-size: 12px;\r\n padding: 0 20px !important;\r\n top: 0px;\r\n height: 30px;\r\n line-height: 30px;\r\n}\r\n.mftcc-tab .el-tabs__nav-wrap::after {\r\n height: 0;\r\n}\r\n.mftcc-tab .el-tabs__content {\r\n padding: 0 10px;\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.mftcc-tab .el-tabs__content .el-tab-pane {\r\n border: none;\r\n -webkit-box-shadow: none;\r\n box-shadow: none;\r\n min-height: calc(100% - 10px);\r\n}\r\n.mftcc-tab .mftcc-list .mftcc-search-form {\r\n margin: 10px 0px;\r\n}\r\n.mftcc-tab .mftcc-list .mftcc-list-table {\r\n margin: 0 0 10px;\r\n}\r\n.mftcc-form-tips {\r\n line-height: 40px;\r\n font-size: 12px;\r\n color: #e72b00;\r\n width: 70%;\r\n margin: 0 auto;\r\n padding-left: 40px;\r\n}\r\n/*tab样式结束*/\r\n/*滚动条样式*/\r\n::-webkit-scrollbar {\r\n /*滚动条整体样式*/\r\n width: 8px; /*高宽分别对应横竖滚动条的尺寸*/\r\n height: 8px;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n /*滚动条里面小方块*/\r\n border-radius: 5px;\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n background: rgba(0, 0, 0, 0.2);\r\n}\r\n::-webkit-scrollbar-track {\r\n /*滚动条里面轨道*/\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n border-radius: 0;\r\n background: rgba(0, 0, 0, 0.1);\r\n}\r\n/* 滚动条样式结束 */\r\n/* 详情页面样式开始 */\r\n.mftcc-details {\r\n background-color: #f2f2f4;\r\n padding: 10px;\r\n /* min-height: 100%; */\r\n /* display: table; \r\n width: 100%;*/\r\n}\r\n.mftcc-details .mftcc-details-card {\r\n background-color: #fff;\r\n min-height: 130px;\r\n margin-bottom: 10px;\r\n padding: 10px;\r\n}\r\n.mftcc-details .mftcc-details-card .mftcc-details-header {\r\n margin-bottom: 2px;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info {\r\n min-height: 200px; /* \r\n background-color: #F8F9FC; */\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-tag--dark.el-tag--success,\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-button--mini,\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-tag--medium {\r\n height: 24px;\r\n line-height: 22px;\r\n padding: 0 16px;\r\n border-radius: 16px;\r\n text-align: center;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .mftcc-details-header-img {\r\n text-align: center;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .mftcc-details-header-img\r\n img {\r\n height: 132px;\r\n width: 132px;\r\n border-radius: 50%;\r\n margin-top: 20px;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom {\r\n height: 32px;\r\n background-color: #e0f4f7;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: end;\r\n -ms-flex-pack: end;\r\n justify-content: flex-end;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom\r\n button {\r\n border: none;\r\n background: none;\r\n margin: 0px;\r\n padding: 0px 10px;\r\n font-size: 14px;\r\n font-weight: 400;\r\n color: #4a7ec3;\r\n height: 100%;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom\r\n button:hover {\r\n color: #4a7ec3;\r\n background-color: #d0e9ed;\r\n border-color: #adadad;\r\n}\r\n.mftcc-details .el-collapse {\r\n border: none;\r\n}\r\n.mftcc-details .el-collapse-item {\r\n margin-bottom: 0;\r\n}\r\n.mftcc-details .el-collapse-item .el-collapse-item__content {\r\n padding-bottom: 0px;\r\n}\r\n.mftcc-details .el-collapse-item__header {\r\n height: 40px;\r\n border-bottom: 0;\r\n background: rgba(64, 158, 255, 0.15);\r\n}\r\n.mftcc-details .el-collapse-item__wrap {\r\n padding: 0;\r\n border: none;\r\n}\r\n.mftcc-details .mftcc-collapse-title {\r\n width: calc(100% - 3px);\r\n height: 37px;\r\n margin-left: 15px;\r\n line-height: 37px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n position: relative;\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-arrow-up:before {\r\n content: url(../../images/slideClose.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-arrow-down:before {\r\n content: url(../../images/slideOpen.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-plus:before {\r\n content: url(../../images/plus.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-edit-outline {\r\n position: absolute;\r\n right: 30px;\r\n top: 10px;\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-edit-outline:before {\r\n content: \"编辑\";\r\n color: #409eff;\r\n font-size: 14px;\r\n}\r\n.mftcc-details .mftcc-collapse-info {\r\n /* min-height: 200px; */\r\n}\r\n.mftcc-details .mftcc-collapse-table-info {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n}\r\n.mftcc-details .mftcc-collapse-title i:first-child {\r\n color: #409eff;\r\n margin-left: 0px;\r\n margin-right: 0;\r\n position: relative;\r\n top: 2px;\r\n font-size: 22px;\r\n}\r\n.mftcc-details .mftcc-collapse-title i:last-child {\r\n font-size: 20px;\r\n float: right;\r\n margin-top: 9px;\r\n margin-right: 10px;\r\n}\r\n.mftcc-details .el-collapse-item__arrow {\r\n display: none;\r\n}\r\n/* 详情页面样式结束 */\r\n/* 基础增改查看页面样式开始 */\r\n.mftcc-container .el-container {\r\n border: none !important;\r\n width: 70%;\r\n margin: 0px auto;\r\n padding: 0px 20px 80px;\r\n}\r\n.mftcc-container .el-header {\r\n height: auto !important;\r\n}\r\n.mftcc-container .mftcc-container-button {\r\n position: fixed;\r\n bottom: 10px;\r\n width: calc(100% - 20px) !important;\r\n left: 10px !important;\r\n background-color: #fafafa;\r\n height: 50px;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n z-index: 100;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n/* .mftcc-container .mftcc-container-button .el-button.el-button--primary,.mftcc-container .mftcc-container-button .el-button.el-button--default {\r\n background: #4a71e3;\r\n border: 1px solid #E1E2E3;\r\n width: 100px;\r\n line-height: 32px;\r\n font-size: 14px;\r\n color: #fff;\r\n padding: 0;\r\n cursor: pointer;\r\n}\r\n.mftcc-container .mftcc-container-button .el-button.el-button--primary:hover,.mftcc-container .mftcc-container-button .el-button.el-button--default:hover {\r\n\tbackground: #36629c;\r\n} */\r\n.mftcc-container .mftcc-container-button .el-button.el-button--default {\r\n background: #ffffff !important;\r\n color: #3d3d3d !important;\r\n border: 1px solid #cccccc !important;\r\n margin-left: 10px;\r\n}\r\n.mftcc-container .el-row {\r\n width: 100%;\r\n}\r\n/* 基础增改查看页面样式结束 */\r\n/* 公共样式 */\r\nbutton.el-button.el-button--primary {\r\n background-color: #409eff;\r\n color: #ffffff;\r\n border: none;\r\n border-radius: 4px;\r\n margin-left: 10px;\r\n min-width: 68px;\r\n height: 32px;\r\n padding: 0 15px;\r\n}\r\nbutton.el-button.el-button--default {\r\n color: #3d3d3d;\r\n background-color: #fff;\r\n border: 1px solid #cccccc;\r\n border-radius: 4px;\r\n margin-left: 10px;\r\n min-width: 68px;\r\n height: 32px;\r\n padding: 0 15px;\r\n}\r\nbutton.el-button.el-button--primary:focus,\r\nbutton.el-button.el-button--primary:hover {\r\n background-color: #5cacff;\r\n color: #ffffff;\r\n}\r\nbutton.el-button.el-button--primary:active {\r\n background-color: #3686d9;\r\n color: #bac8d9;\r\n}\r\nbutton.el-button.el-button--default:focus,\r\nbutton.el-button.el-button--default:hover {\r\n background-color: #fff;\r\n color: #409eff;\r\n border-color: #409eff38;\r\n}\r\nbutton.el-button.el-button--default:active {\r\n border-color: #409eff;\r\n}\r\n.mftcc-form .el-input.is-disabled .el-input__inner,\r\n.mftcc-form .el-textarea.is-disabled .el-textarea__inner,\r\n.mftcc-form .el-switch.is-disabled,\r\n.mftcc-form .el-checkbox-group.is-disabled,\r\n.mftcc-form .el-radio-group.is-disabled {\r\n background-color: #fafafa;\r\n border-color: transparent;\r\n color: #cccccc !important;\r\n cursor: not-allowed;\r\n height: 100% !important;\r\n border-radius: 0;\r\n}\r\n.el-dropdown-menu {\r\n min-width: 200px;\r\n}\r\n.el-dropdown-menu .el-dropdown-menu__item {\r\n margin: 0;\r\n padding: 5px 16px;\r\n}\r\n.v-modal {\r\n opacity: 0.35;\r\n}\r\n.el-dialog__wrapper {\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n}\r\n.el-dialog {\r\n margin: 0 !important;\r\n border-radius: 8px;\r\n max-width: 90%;\r\n max-height: 90%;\r\n}\r\n.el-dialog > .el-dialog__header {\r\n padding: 0;\r\n min-height: 54px;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n background: rgba(24, 144, 255, 0.06);\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__title {\r\n color: rgba(0, 0, 0, 0.85);\r\n line-height: 22px;\r\n font-size: 16px;\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__headerbtn {\r\n top: 14px;\r\n font-size: 24px;\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__headerbtn > .el-dialog__close {\r\n color: #3d3d3d;\r\n font-weight: 700;\r\n}\r\n.el-dialog > .el-dialog__body {\r\n padding: 0;\r\n}\r\n.el-dialog > .el-dialog__footer {\r\n padding: 0;\r\n min-height: 52px;\r\n background: rgba(24, 144, 255, 0.06);\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -webkit-box-align: center;\r\n -ms-flex-align: center;\r\n align-items: center;\r\n -webkit-box-pack: center;\r\n -ms-flex-pack: center;\r\n justify-content: center;\r\n}\r\n.el-dialog > .el-dialog__footer .el-button {\r\n min-width: 100px;\r\n}\r\n.el-select-dropdown__item.hover,\r\n.el-select-dropdown__item:hover {\r\n background-color: #ecf5ff;\r\n}\r\n.el-textarea__inner {\r\n overflow: auto;\r\n}\r\n","/*table样式*/\r\n.mftcc-table{\r\n\tflex-grow: 1;\r\n\tmargin: 0 12px;\r\n\tmargin-bottom: 12px;\r\n}\r\n.mftcc-table .el-table .cell, .el-table--border td:first-child .cell, .el-table--border th:first-child .cell{\r\n\t padding-left: 16px;\r\n}\r\n/* .mftcc-table .el-table__body {\r\n background: white;\r\n border: none;\r\n} */\r\n/* .mftcc-table .el-table__body tr {\r\n line-height: 30px !important;\r\n height: 30px !important;\r\n border-bottom: none;\r\n}\r\n.mftcc-table .el-table__body tr:nth-child(even) {\r\n background: #f1f1f1;\r\n}\r\n.mftcc-table .el-table__body tr:nth-child(odd) {\r\n background: #fff;\r\n} */\r\n.mftcc-table .el-table__body tr td{\r\n\tfont-size: 14px;\r\n color: #3D3D3D;\r\n border: none;\r\n\tpadding:8px 0px;\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n/* .mftcc-table .el-table__body tr td:first-child{\r\n\tborder-left: 1px solid #E8E8E8;\r\n}\r\n.mftcc-table .el-table__body tr td:last-child{\r\n\tborder-right: 1px solid #E8E8E8;\r\n} */\r\n.mftcc-table .el-table__body tr:nth-child(even){\r\n\tbackground: #FAFAFA;\r\n}\r\n.mftcc-table .el-table__body tr td a,.mftcc-form .el-form-item a{\r\n\tcolor: #409EFF;\r\n text-decoration: none;\r\n}\r\n.mftcc-table .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n\tbackground: #E3F1FF;\r\n}\r\n.mftcc-form .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n background: transparent;\r\n}\r\n.mftcc-table .el-table__body tr.current-row>td{\r\n\tbackground: #E3F1FF;\r\n}\r\n.mftcc-table .el-form-item{\r\n margin-bottom: 0;\r\n}\r\n/* .mftcc-table .el-table__header {\r\n\tdisplay: block;\r\n\tz-index: 9;\r\n\tposition: absolute;\r\n\tbackground-color: #ffffff;\r\n\tborder:none;\r\n} */\r\n.mftcc-table .el-table th{\r\n\tcolor: #141414;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\tbox-sizing: border-box;\t\r\n \tpadding: 0 5px;\r\n\theight: 48px;\r\n line-height: 48px;\r\n /* text-align: center; */\r\n white-space: nowrap;\r\n\tcursor: default;\r\n\tbackground: #F5F5F5;\r\n\tborder-right: 1px solid #E8E8E8;\r\n border-top: 1px solid #E8E8E8;\r\n\tfont-weight: bold;\r\n}\r\n/* .mftcc-table .el-table th:first-child{\r\n\tborder-left:1px solid #E8E8E8;\r\n} */\r\n.mftcc-table .el-table th>.cell{\r\n display: block;\r\n padding-left: 14px;\r\n padding-right: 14px;\r\n}\r\n/*分页*/\r\n.mftcc-table .el-pagination{\r\n\t/* position: absolute;\r\n bottom: 4px; \r\n width: 100%;*/\r\n\tbackground: #FAFAFA;\r\n\tpadding: 0px;\r\n\ttext-align: right;\r\n\tpadding-right: 10px;\r\n\tmargin: 0px !important;\r\n\tpadding-left: 10px;\r\n\theight: 40px;\r\n}\r\n.mftcc-table .el-pagination .el-pagination__total,.mftcc-table .el-pagination .el-pagination__sizes{\r\n\tfloat: left;\r\n\tfont-size: 12px;\r\n}\r\n.mftcc-table .el-pagination.is-background .el-pager li:not(.disabled){\r\n\tcolor: #141414;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\theight: 40px;\r\n line-height: 40px;\r\n}\r\n.mftcc-table .el-pagination__editor.el-input{\r\n\tmargin: 0 5px;\r\n}\r\n.mftcc-table .el-pagination__editor.el-input .el-input__inner{\r\n\twidth: 48px;\r\n height: 28px;\r\n background: #FFFFFF;\r\n border-radius: 2px;\r\n border: 1px solid #E8E8E8;\r\n}\r\n.mftcc-table .el-input--mini .el-input__inner{\r\n\twidth: 84px;\r\n height: 28px;\r\n background: #FFFFFF;\r\n border-radius: 2px !important;\r\n border: 1px solid #E8E8E8;\r\n font-size: 12px;\r\n}\r\n.mftcc-table .el-pagination .el-pagination__jump{\r\n\tfont-size: 12px !important;\r\n color: #3D3D3D;\r\n}\r\n.mftcc-table .el-pagination button, .el-pagination span:not([class*=suffix]){\r\n\theight: 40px;\r\n line-height: 40px;\r\n}\r\n.el-pagination.is-background .btn-next, .el-pagination.is-background .btn-prev, .el-pagination.is-background .el-pager li{\r\n\tbackground-color: transparent;\r\n\tfont-size: 12px;\r\n\tcolor: #141414;\r\n\tmin-width: 25px;\r\n}\r\n.mftcc-table .el-pagination.is-background .el-pager li:not(.disabled).active{\r\n\tcolor: #409EFF;\r\n\tbackground: none;\r\n}\r\n\r\n.mftcc-table .is-disabled .el-input__inner,.mftcc-table .is-disabled .el-textarea__inner{\r\n\tbackground-color: #F5F7FA !important;\r\n border-color: #E4E7ED !important;\r\n color: #C0C4CC !important;\r\n cursor: not-allowed !important;\r\n}\r\n.mftcc-table .el-table__row .el-button--default{\r\n background: none;\r\n\tborder: none;\r\n\tcolor: #409EFF;\r\n\tpadding: 5px 0px;\r\n\tmin-width: auto;\r\n height: auto;\r\n}\r\n.mftcc-table .el-table__row .el-button--default:hover{\r\n background-color: transparent;\r\n}\r\n.mftcc-table .el-table__row .el-button--default:first-child{\r\n\tmargin-left: 0px;\r\n}\r\n.mftcc-table .el-table__row .el-button--default.is-disabled{\r\n\tcolor: #C0C4CC;\r\n\tcursor: pointer;\r\n}\r\n/* talbe样式结束 */\r\n/* 可编辑table样式开始 */\r\n.mftcc-edit-table{\r\n\tmargin: 0px 20px 0px 20px;\r\n \twidth: auto !important;\r\n}\r\n.mftcc-edit-table .el-table__body tr td{\r\n\tfont-size: 12px;\r\n color: #575757;\r\n border: 0px solid #e9ebf2;\r\n\tpadding:4px 0px;\r\n\tborder-bottom: 1px solid #eee;\r\n}\r\n.mftcc-edit-table .el-table__body tr td a{\r\n\t color: #4a7ec3;\r\n text-decoration: none;\r\n}\r\n.mftcc-edit-table .el-table__body tbody tr:hover {\r\n background-color: #d6f0f5 !important;\r\n}\r\n.mftcc-edit-table .el-table th{\r\n\tcolor: #7e8ea4;\r\n\tfont-size: 14px;\r\n\tfont-weight: bold;\r\n\tbox-sizing: border-box;\t\r\n \tpadding: 0 5px;\r\n\theight: 41px;\r\n line-height: 41px;\r\n white-space: nowrap;\r\n\tcursor: default;\r\n\tbackground: #EDF2FA;\r\n\tborder:1px solid rgba(225,226,227,1);\r\n\tfont-weight: bold;\r\n}\r\n.mftcc-edit-table .el-table th>.cell{\r\n\tdisplay: block;\r\n}\r\n/*分页*/\r\n.mftcc-edit-table .el-pagination{\r\n\tbackground: #fff;\r\n\ttext-align: right;\r\n\tpadding-right: 10px;\r\n\tmargin-top: 10px !important;\r\n}\r\n.mftcc-edit-table .el-pagination .el-pagination__total,.mftcc-edit-table .el-pagination .el-pagination__sizes{\r\n\tfloat: left;\r\n}\r\n.mftcc-edit-table .el-pagination.is-background .el-pager li:not(.disabled).active{\r\n\tbackground: #4a7ec3;\r\n}\r\n\r\n\r\n.mftcc-edit-table .el-table__row .el-button--default{\r\n background: none;\r\n\tborder: none;\r\n\tcolor: #4a7ec3;\r\n\tpadding: 10px 0px;\r\n}\r\n\r\n.mftcc-edit-table .el-table__row .el-button--default.is-disabled{\r\n\tcolor: #C0C4CC;\r\n\tcursor: pointer;\r\n}\r\n/* 可编辑table样式结束 */\r\n/*表单样式*/\r\n.mftcc-form .el-form-item{\r\n\tmargin-bottom: 0;\r\n\tpadding-left: 0px !important;\r\n\tpadding-right: 0px !important;\r\n\tbackground: #F5F5F5;\r\n\theight: 100%;\r\n\tborder-right: 1px solid #E8E8E8;\r\n\tmin-height: 48px;\r\n}\r\n.mftcc-form .el-form-item.mftcc-form-empty{\r\n\tbackground: transparent;\r\n}\r\n.mftcc-form .el-form-item__label{\r\n\t/* width: 35% !important; */\r\n\tpadding: 3px 12px;\r\n line-height:34px;\r\n\tvertical-align: middle;\r\n\theight: 100%;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tmargin-top: 0px;\r\n\tcolor: #141414;\r\n}\r\n.mftcc-form.el-form--label-right .el-form-item__label{\r\n\tjustify-content: flex-end;\r\n}\r\n.mftcc-form .el-table__body tr td:first-child .el-form-item{\r\n\tborder-left: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form .el-form-item__content{\r\n\t/* margin-left: 35% !important; */\r\n\tbackground: #fff;\r\n\t/* border-right: 1px solid #E8E8E8; */\r\n\tborder-left: 1px solid #E8E8E8;\r\n\tposition: relative;\r\n\tright:1px;\r\n\t padding: 0px;\r\n\t height: 100%;\r\n}\r\n.mftcc-form.el-form--label-top .el-form-item__label{\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form.el-form--label-top .el-form-item__label,.mftcc-form.el-form--label-top .el-form-item__content{\r\n\theight: 50%;\r\n\tmin-height: 48px;\r\n}\r\n.mftcc-form .el-table__body td{\r\n\t border-top: 1px solid #E8E8E8;\r\n\t height: 0px;\r\n}\r\n.mftcc-form .el-table__body{\r\n\tborder-bottom: 1px solid #E8E8E8;\r\n}\r\n.mftcc-form .mftcc-form-group .el-col .el-form-item__content{\r\n\tmargin: 0px !important;\r\n border: none;\r\n padding: 0px;\r\n}\r\n\r\n.mftcc-form .mftcc-form-group .el-form-item{\r\n\tbackground:none;\r\n}\r\n.mftcc-form .el-table__body td{\r\n\tbackground: #fff;\r\n}\r\n/* .mftcc-form .el-form-item.mftcc-form-empty,\r\n.mftcc-form .el-form-item.mftcc-form-empty .el-form-item__label,\r\n.mftcc-form .el-form-item.mftcc-form-empty .el-form-item__content{\r\n\tbackground:none;\r\n\tborder: none;\r\n} */\r\n\r\n.mftcc-form .el-date-editor.el-input, .mftcc-form .el-date-editor.el-input__inner {\r\n width: 100%;\r\n}\r\nsection.el-container{\r\n\tborder: none!important;\r\n}\r\n.mftcc-form .el-input__inner{\r\n\tborder: none;\r\n\theight: 100% !important;\r\n}\r\n.mftcc-form .el-textarea__inner{\r\n\tborder: none;\r\n\t/* height: 40px; */\r\n\toutline:none;\r\n\tresize:none;\r\n}\r\n.mftcc-form .el-checkbox-group,\r\n.mftcc-form .el-radio-group,\r\n.mftcc-form .el-switch{\r\n\tpadding: 0 15px;\r\n line-height: 25px;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.mftcc-form .el-input__suffix{\r\n\tdisplay: flex;\r\n align-items: center;\r\n}\r\n.mftcc-form .el-radio{\r\n\tline-height: 34px;\r\n}\r\n.el-scrollbar__wrap{\r\n overflow: auto;\r\n margin: 0 !important;\r\n}\r\n.mftcc-form .el-alert--success.is-dark{\r\n\theight: 48px;\r\n\tpadding: 8px;\r\n\tborder-left: 1px solid #E8E8E8;\r\n\tborder-right: 1px solid #E8E8E8;\r\n\tborder-radius: 0;\r\n\tbackground: rgba(64, 158, 255, 0.15) !important;\r\n}\r\n.mftcc-form .el-alert--success.is-dark .el-alert__title{\r\n\tfont-size:14px;\r\n\tcolor:#141414;\r\n}\t\r\n.mftcc-form .el-form-item__error {\r\n\ttop: auto;\r\n left: auto;\r\n right: 16px;\r\n z-index: 99;\r\n bottom: 18px;\r\n}\r\n\r\n.mftcc-form .mftcc-form-group .el-form-item__error {\r\n\ttop: auto;\r\n left: 15px;\r\n z-index: 99;\r\n bottom: -13px;\r\n}\r\n.mftcc-form .el-table .cell{\r\n\tpadding: 0px;\r\n}\r\n.mftcc-form .el-table .cell,\r\n.mftcc-form .el-table .cell>div,\r\n.mftcc-form .mftcc-form-item,\r\n.mftcc-form .el-input,\r\n.mftcc-form .el-textarea,\r\n.mftcc-form .el-select,\r\n.mftcc-form .el-cascader,\r\n.mftcc-form .mftcc-dailog{\r\n\theight: 100%;\r\n}\r\n.mftcc-form .mftcc-dailog{\r\n width: 100%;\r\n}\r\n.mftcc-form .el-form-item__content .el-input{\r\n height: calc(100% - 4px);\r\n margin-top: 2px;\r\n\tborder: 1px solid transparent;\r\n}\r\n.mftcc-form .el-form-item__content .el-select .el-input,.mftcc-form .el-form-item__content .el-cascader .el-input{\r\n\tmargin-top: 0px;\r\n}\r\n.mftcc-form .el-form-item__content .el-textarea{\r\n\tborder: 1px solid transparent;\r\n}\r\n.mftcc-form .el-form-item__content .el-input.is-disabled,\r\n.mftcc-form .el-form-item__content .el-textarea.is-disabled,\r\n\r\n.mftcc-form .is-disabled .el-form-item__content .el-input,\r\n.mftcc-form .is-disabled .el-form-item__content .el-textarea{\r\n height: 100%;\r\n border: none !important;\r\n box-shadow: none !important;\r\n}\r\n.mftcc-form .el-form-item__content>.el-select,.mftcc-form .el-form-item__content>.el-cascader,.mftcc-form .el-form-item__content>.mftcc-dailog{\r\n display: flex;\r\n align-items: center;\r\n}\r\n.mftcc-form .el-form-item__content .el-input:hover,\r\n.mftcc-form .el-form-item__content .el-textarea:hover{\r\n border: 1px solid #409EFF;\r\n box-shadow: 0px 0px 5px 0px #409EFF;\r\n}\r\n.mftcc-form .el-form-item__content .el-select__tags,.mftcc-form .el-form-item__content .el-cascader__tags{\r\n pointer-events: none;\r\n}\r\n.mftcc-form .el-form-item__content .el-select__tags>span,.mftcc-form .el-form-item__content .el-cascader__tags>span{\r\n pointer-events: auto;\r\n}\r\n.mftcc-form .el-select .el-select__tags,.mftcc-form .el-cascader .el-cascader__tags{\r\n\tpadding: 5px 0;\r\n max-width: none !important;\r\n position: relative;\r\n height: 100%;\r\n}\r\n.mftcc-form .el-select .el-select__tags + .el-input,.mftcc-form .el-cascader>.el-input{\r\n position: absolute;\r\n top: 2px;\r\n left: 0px;\r\n}\r\n.mftcc-form .el-cascader .el-cascader__search-input{\r\n background-color: transparent;\r\n}\r\n/* 弹层table样式 */\r\n.mftcc-table-dialog .el-dialog__body{\r\n\tpadding-top: 10px;\r\n}\r\n.mftcc-table-dialog .mftcc-search-form{\r\n\tpadding: 0 20px;\r\n}\r\n.mftcc-table-dialog .mftcc-dialog-content{\r\n\tpadding-top: 20px;\r\n}\r\n/* 弹层table样式结束 */\r\n\r\n/* 列表按钮样式开始 */\r\n.mftcc-form-buttom{\r\n\tpadding: 8px 12px;\r\n position: relative;\r\n\ttext-align: right;\r\n\tmargin: 0 12px;\r\n background: #FFF;\r\n}\r\n.mftcc-form-buttom.queryModel>span{\r\n\tfloat: left;\r\n font-size: 18px;\r\n line-height: 30px;\r\n display: block;\r\n}\r\n/* .mftcc-form-buttom button,.mftcc-form-tools button{\r\n\tbackground-color: #409EFF;\r\n color: #FFFFFF;\r\n border: none;\r\n\tborder-radius: 4px;\r\n\tmargin-left: 10px;\r\n\tmin-width: 68px;\r\n\theight: 32px;\r\n\tpadding: 0;\r\n} */\r\n.mftcc-form-buttom .sysBtns button,.mftcc-form-tools .sysBtns button{\r\n\tbackground-color: #fff;\r\n\tcolor: #409EFF;\r\n\tborder: 1px solid rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-form-buttom .sysBtns button:hover, .mftcc-form-tools .sysBtns button:hover{\r\n\tbackground: rgba(64, 158, 255, 0.15);\r\n\tborder-radius: 4px;\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .mftcc-form-tools-item{\r\n display: flex;\r\n align-items: center;\r\n}\r\n.mftcc-form-buttom>button:first-child{\r\n\tmargin-left: 0px;\r\n}\r\n.mftcc-form-buttom.queryModel .sysBtns{\r\n\tdisplay: inline-block;\r\n\tmargin-right: 20px;\r\n}\r\n.mftcc-form-buttom.dynamicModel{\r\n\ttext-align: left;\r\n\tmargin-bottom: 1px;\r\n\tmargin-top: 12px;\r\n}\r\n/* .mftcc-form-buttom.dynamicModel button{\r\n\tpadding: 6px 12px;\r\n\tpadding-left: 20px;\r\n background-color: #4A7EC3;\r\n\tbackground:#4A7EC3 url(../../images/Group23.png) no-repeat 8px center ;\r\n color: #FFFFFF;\r\n\theight: 28px;\r\n\twidth: 68px;\r\n\ttext-align: center;\r\n\tmargin-left: 0;\r\n margin-right: 10px;\r\n} */\r\n/* .mftcc-form-buttom.dynamicModel button:hover{\r\n\t background-color: #36629C;\r\n} */\r\n/* 列表按钮样式结束 */\r\n\r\n/* 列表工具栏样式开始 */\r\n.mftcc-form-tools{\r\n\tpadding: 8px 12px;\r\n position: relative;\r\n\tmargin: 0 12px;\r\n\tbackground: #FFF;\r\n\tdisplay: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n}\r\n.mftcc-form-tools>.mftcc-form-tools-item>div{\r\n\tdisplay: inline-block;\r\n}\r\n.mftcc-form-tools .el-tabs__header{\r\n\tmargin: 0;\r\n}\r\n.mftcc-form-tools .el-tabs__item{\r\n\tpadding: 0px 12px;\r\n text-align: center;\r\n\tfont-size: 14px;\r\n\tcolor: #3D3D3D;\r\n}\r\n.mftcc-form-tools .el-tabs__item:hover{\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__item.is-active{\r\n\tcolor: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__active-bar{\r\n\tbackground-color: #409EFF;\r\n}\r\n.mftcc-form-tools .el-tabs__nav-wrap::after{\r\n\theight: 0px;\r\n}\r\n.mftcc-form-tools .el-input__inner{\r\n\twidth: 230px;\r\n height: 32px;\r\n background: #FFFFFF;\r\n border-radius: 2px;\r\n border: 1px solid #CCCCCC;\r\n line-height: 32px;\r\n}\r\n.mftcc-form-tools .el-input__inner:hover{\r\n\tborder: 1px solid #409EFF;\r\n}\r\n.mftcc-form-tools .el-input__suffix{\r\n\twidth: 30px;\r\n height: 30px;\r\n background: rgba(64, 158, 255, 0.15);\r\n border-radius: 0px 2px 2px 0px;\r\n border: 1px solid rgba(64, 158, 255, 0.45);\r\n margin-right: -5px;\r\n font-size: 12px;\r\n color: #409EFF;\r\n display: flex;\r\n justify-content: center;\r\n\talign-items: center;\r\n\tcursor: pointer;\r\n}\r\n.mftcc-form-tools .el-input__icon.el-icon-search{\r\n\tcursor: pointer;\r\n}\r\n.mftcc-form-tools .el-input__icon.el-input__validateIcon{\r\n\tdisplay: none;\r\n}\r\n/* 列表工具栏样式结束 */\r\n.mftcc-details .el-card__body{\r\n padding: 12px;\r\n}\r\n/*单独显示label开始 */\r\n.mftcc-form-item .only-label .el-form-item__label{\r\n width: 100%!important;\r\n}\r\n.mftcc-form-item .only-label .el-form-item__content{\r\n display: none;\r\n}\r\n/*单独显示label结束 */\r\n/*单独显示input开始 */\r\n.mftcc-form-item .only-input .el-form-item__label{\r\n display: none;\r\n}\r\n.mftcc-form-item .only-input .el-form-item__content{\r\n width: 100%!important;\r\n margin-left:0px!important;\r\n}\r\n/*单独显示input结束 */\r\n.mftcc-form-item .mftcc-form-empty .el-form-item__label{\r\n display: none;\r\n}\r\n.mftcc-form-item .mftcc-form-empty .el-form-item__content{\r\n display: none;\r\n}\r\n/* tooltip样式 开始*/\r\n.el-tooltip__popper.is-dark{\r\n color: #3D3D3D;\r\n box-shadow: 0px 0px 4px 0px #409eff;\r\n background: #e3f1ff;\r\n line-height: 24px;\r\n font-size: 14px;\r\n}\r\n.el-tooltip__popper[x-placement^=top] .popper__arrow{\r\n border-top-color: rgb(64 158 255 / 47%);\r\n}\r\n.el-tooltip__popper[x-placement^=top] .popper__arrow::after{\r\n border-top-color: #e3f1ff;\r\n}\r\n/* tooltip样式 结束*/","/*table样式*/\r\n/* .mftcc-table-query .el-table__body {\r\n background: white;\r\n table-layout: auto;\r\n padding-top: 48px;\r\n} */\r\n/* .mftcc-table-query .el-table__body tr {\r\n height: 41px;\r\n line-height: 41px;\r\n font-size: 14px;\r\n color: #7f7f7f;\r\n background: #ffffff;\r\n border-bottom: 1px solid #f3f3f3;\r\n} */\r\n.mftcc-table-query .el-table__body tr td{\r\n border: none !important;\r\n padding: 0px 0px !important;\r\n line-height: 41px;\r\n vertical-align: center;\r\n color: #3d3d3d;\r\n}\r\n.mftcc-table-query .el-table__body tr:nth-child(even) td{\r\nbackground: #fafafa;\r\n}\r\n.mftcc-table-query .el-table__body tr td a{\r\n color: #4a7ec3;\r\n text-decoration: none;\r\n}\r\n.mftcc-table-query .el-table--enable-row-hover .el-table__body tr:hover>td,\r\n.mftcc-table-query .el-table__body tr.hover-row.current-row>td, \r\n.mftcc-table-query .el-table__body tr.hover-row.el-table__row--striped.current-row>td, \r\n.mftcc-table-query .el-table__body tr.hover-row.el-table__row--striped>td, \r\n.mftcc-table-query .el-table__body tr.hover-row>td{\r\nbackground-color: #E3F2FD !important;\r\n}\r\n/* .mftcc-table-query .el-table__header {\r\ndisplay: block;\r\nz-index: 9;\r\nposition: absolute;\r\nbackground-color: #ffffff;\r\n} */\r\n.mftcc-table-query .el-table tr{\r\nheight: 36px;\r\n line-height: 36px;\r\n border-bottom: 1px solid #e9ebf2;\r\n color: #000000;\r\n}\r\n/* .mftcc-table-query .el-table tr:hover th{\r\n background-color: #E3F2FD !important;\r\n} */\r\n.mftcc-table-query .el-table th{\r\nfont-size: 14px;\r\n font-weight: normal;\r\n color: #3D3D3D;\r\n padding: 0px;\r\n background-color: rgba(64, 158, 255, 0.06);\r\nborder:none;\r\n \r\n}\r\n.mftcc-table-query .el-dropdown-DColumn{\r\n position: absolute;\r\n z-index: 10;\r\n top: 10px;\r\n right: 5px;\r\n}\r\n/*分页*/\r\n.mftcc-table-query .el-pagination{\r\n/* position: absolute;\r\n bottom: 4px; \r\n width: 100%;*/\r\nbackground: #fff;\r\n/* padding: 0px; */\r\ntext-align: right;\r\npadding-right: 10px;\r\nmargin-top: 10px !important;\r\n}\r\n.mftcc-table-query .el-pagination .el-pagination__total,.mftcc-table-query .el-pagination .el-pagination__sizes{\r\nfloat: left;\r\n}\r\n.mftcc-table-query .el-pagination.is-background .el-pager li:not(.disabled).active{\r\nbackground: #4a7ec3;\r\n}\r\n.mftcc-table-query .el-table__row .el-button--default{\r\nbackground-color: transparent !important;\r\nborder: none;\r\ncolor: #409EFF;\r\npadding: 10px 0px;\r\n}\r\n/*表单样式*/\r\n.mftcc-form-query .el-form-item{\r\nmargin-bottom: 0px;\r\npadding-left: 0px !important;\r\n padding-right: 0px !important;\r\n}\r\n\r\n.mftcc-form-query .el-col{\r\n background: #fff;\r\n}\r\n/* .mftcc-form-query .el-col:nth-child(4n+1),.mftcc-form-query .el-col:nth-child(4n+1){\r\n clear:left;\r\n} */\r\nsection.el-container{\r\nborder: none!important;\r\n}\r\n.mftcc-form-query .el-input.is-disabled .el-input__inner{\r\nborder: none;\r\nbackground: none;\r\n color: #666;\r\n cursor: text;\r\n line-height: 20px;\r\n height: 20px;\r\n padding: 0 10px;\r\n}\r\n.mftcc-form-query .el-form-item__content,.mftcc-form-query .el-form-item__label{\r\npadding-left: 10px;\r\nwidth: 100%;\r\nline-height: 36px;\r\nheight: 36px;\r\nborder-bottom: none;\r\n}\r\n.mftcc-form-query .el-table__body{\r\nborder: none;\r\nborder-bottom: 0;\r\n}\r\n.mftcc-form-query .el-table__body .el-alert--success.is-dark{\r\nbackground: #EDF2FA;\r\nmargin-bottom: 0 !important;\r\nborder-bottom: 1px solid #E1E2E3;\r\nborder-right:1px solid #E1E2E3;\r\nborder-left:1px solid #E1E2E3;\r\nborder-radius: 0;\r\nposition: relative;\r\nleft: 1px;\r\ncolor: #3D3D3D;\r\n\r\n}\r\n.mftcc-table-query .el-table__header,.mftcc-table-query .el-table__body{\r\nborder: none;\r\n}\r\n.mftcc-form-query .el-table__body tr:last-child td .el-form-item__content:last-child,.mftcc-form-query .el-table__body tr:last-child td .el-form-item__content:last-child .el-form-item__label{\r\nborder-bottom: 0;\r\n}\r\n/* .mftcc-form-query .el-table__body td:last-child{\r\nborder-right: 1px solid #E1E2E3;\r\nposition: relative;right: 2px;\r\n} */\r\n.mftcc-form-query .el-checkbox.is-disabled,.mftcc-form-query .el-radio.is-disabled{\r\ndisplay: none;\r\nmargin-right: 0;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked,.mftcc-form-query .el-radio.is-disabled.is-checked{\r\ndisplay: inline-block;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__input,.mftcc-form-query .el-radio.is-disabled.is-checked .el-radio__input{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__label,.mftcc-form-query .el-radio.is-disabled.is-checked .el-radio__label{\r\ndisplay: block;\r\ncolor: #666;\r\ncursor: text;\r\npadding-left: 0;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled.is-checked .el-checkbox__label:after{\r\ncontent: \"|\";\r\nmargin: 0 6px;\r\n}\r\n.mftcc-form-query .el-checkbox.is-disabled[class~='is-checked']:last-of-type .el-checkbox__label:after{\r\ncontent: \"\";\r\n}\r\n.mftcc-form-query .el-textarea__inner{\r\nborder: none;\r\nresize: none;\r\n}\r\n.mftcc-form-query .el-input.is-disabled .el-input__icon{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-input--prefix .el-input__inner{\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-radio{\r\nline-height: 34px;\r\n}\r\n.mftcc-form-query .el-checkbox-group,.mftcc-form-query .el-radio-group{\r\npadding-left: 10px;\r\n}\r\n.el-scrollbar__wrap{\r\noverflow: auto;\r\n} \r\n.mftcc-form-query.el-form--label-top .el-form-item__label{\r\nposition: relative;\r\nline-height: 36px;\r\npadding-bottom: 0;\r\npadding-left: 10px;\r\nwidth: 100%;\r\nbackground: #FAFAFA;\r\nborder-bottom: none;\r\ncolor: #3D3D3D;\r\n\r\n}\r\n.mftcc-form-query .el-table--enable-row-hover .el-table__body tr:hover>td{\r\n background-color: transparent !important;\r\n}\r\n\r\n.mftcc-form-query.el-form--label-top .el-form-item__label\r\n.mftcc-form-query.el-form--label-top .el-form-item__label:before{\r\nleft: 0px!important;\r\nposition: absolute;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled:after{\r\ncontent: \"否\";\r\ncolor: #666;\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled{\r\nopacity: 1;\r\n}\r\n.mftcc-form-query .el-switch.is-disabled.is-checked:after{\r\ncontent: \"是\";\r\n}\r\n.mftcc-form-query .el-switch.is-disabled .el-switch__core{\r\ndisplay: none;\r\n}\r\n.mftcc-form-query .el-textarea.is-disabled .el-textarea__inner{\r\nbackground: none;\r\ncursor: text;\r\n}\r\n.mftcc-form-query .el-form-item__content{\r\npadding-left: 10px;\r\n}\r\n.mftcc-form-query .el-form-item__content span{\r\npadding-right: 20px;\r\ndisplay: block;\r\ncolor: #3D3D3D;\r\noverflow: hidden;\r\n text-overflow: ellipsis;\r\nwhite-space: nowrap;\r\n}\r\n.mftcc-form-query .el-table .cell{\r\npadding: 0px;\r\nheight: 100%;\r\n}\r\n",".mftcc-form-search{\r\n padding: 8px 12px;\r\n margin: 12px;\r\n margin-bottom: 1px;\r\n background-color: #FFF;\r\n width: auto;\r\n}\r\n.mftcc-form-search .el-form-item {\r\n margin-bottom: 0px;\r\n}\r\n.mftcc-form-search .el-form-item__content input{\r\n\theight: 34px;\r\n}\r\n.mftcc-form-search .el-range-editor .el-range-input{\r\n height: 32px;\r\n}\r\n.mftcc-form-search .el-date-editor .el-range-separator{\r\n height: 34px;\r\n line-height: 34px;\r\n white-space: nowrap;\r\n}\r\n.mftcc-form-search .el-date-editor .el-range__close-icon{\r\n display: none;\r\n}\r\n.mftcc-form-search .el-form-item__label{\r\n width: 35% !important;\r\n}\r\n\r\n.mftcc-form-search .el-form-item__content{\r\n\tmargin-left: 35% !important;\r\n}\r\n\r\n.mftcc-form-search .el-date-editor{\r\n width: 100%;\r\n}\r\n.mftcc-form-search .el-table .cell{\r\n\tpadding: 0px;\r\n}\r\n.mftcc-form-search .widgets{\r\n padding: 0px;\r\n margin: 0;\r\n}\r\n.mftcc-form-search .search-button button {\r\n background-color: #409EFF;\r\n border: none;\r\n border-radius: 0px;\r\n height: 100%;\r\n float: right;\r\n padding: 10px 20px;\r\n border-radius: 4px;\r\n}",".mftcc-table .isExpand.el-table--enable-row-hover .mftcc-form-expand .el-table__body tr:hover>td{\r\n background: #F3F9FF;\r\n}\r\n.mftcc-table .isExpand .mftcc-form-expand .el-table__body tr:nth-child(even){\r\n background: none;\r\n}\r\n.mftcc-table .isExpand .mftcc-form-expand .el-table__body tr td{\r\n border:none;\r\n}\r\n/* .mftcc-table .mftcc-form-expand .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{\r\n content:\"\"\r\n} */\r\n.mftcc-table .isExpand .el-form-item__label{\r\n color: #99a9bf;\r\n}\r\n.mftcc-table .isExpand .el-form-item__content{\r\n color: #606266;\r\n padding-left: 12px;\r\n}\r\n.mftcc-table .isExpand .el-table__expanded-cell:hover{\r\n background-color: #FFFFFF !important;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-form-item__label{\r\n line-height: 30px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input__inner,.mftcc-table .isExpand .expandEditForm .el-input__icon,.mftcc-table .isExpand .expandEditForm .el-form-item__content{\r\n height: 30px;\r\n line-height: 30px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input,.mftcc-table .isExpand .expandEditForm .el-textarea{\r\n width: 250px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-table__body tr td{\r\n padding: 4px 0;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-tag--small{\r\n height: 20px;\r\n line-height: 20px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-select .el-tag__close.el-icon-close{\r\n top: -1px;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-input__inner:hover, .mftcc-table .isExpand .expandEditForm .el-textarea__inner:hover, .mftcc-table .isExpand .expandEditForm .el-select:hover .el-input__inner {\r\n border: 1px solid #409EFF;\r\n box-shadow: 0px 0px 5px 0px #409EFF;\r\n}\r\n.mftcc-table .isExpand .expandEditForm .el-form-item__error{\r\n top: 5px;\r\n left: 275px;\r\n}","/* @import \"../../../../assets/font/font.css\"; */\r\n@import \"./header.css\";\r\n@import \"./menu.css\";\r\n@import \"./components.css\";\r\n@import \"./components_query.css\";\r\n@import \"./components_search.css\";\r\n@import \"./components_expand.css\";\r\n\r\nbody,\r\ntd,\r\nth {\r\n font-family: \"Helvetica Neue\", Helvetica, \"PingFang SC\", \"Hiragino Sans GB\",\r\n \"Microsoft YaHei\", \"微软雅黑\", Arial, sans-serif;\r\n}\r\n.el-header,\r\n.el-footer {\r\n color: #333;\r\n text-align: center;\r\n display: flex;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n.el-main {\r\n display: flex;\r\n color: #333;\r\n flex-direction: column;\r\n height: 100%;\r\n padding: 0px;\r\n}\r\n.el-main > .pt,\r\n#app > .pt {\r\n display: flex;\r\n width: 100%;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n height: 100%;\r\n}\r\nhtml,\r\nbody,\r\n#app,\r\n.el-container.is-vertical {\r\n padding: 0px;\r\n margin: 0px;\r\n height: 100%;\r\n overflow: hidden;\r\n}\r\n.el-loading-mask.is-fullscreen {\r\n z-index: 9999 !important;\r\n}\r\n#app {\r\n overflow: auto;\r\n}\r\n.el-container {\r\n height: 100%;\r\n}\r\n.el-container.mftcc-main-el-containner {\r\n height: calc(100% - 55px) !important;\r\n}\r\n/* 悬浮菜单 开始 */\r\n.mftcc-fixed-drawer {\r\n top: 55px;\r\n}\r\n.mftcc-fixed-drawer .el-drawer__header {\r\n padding: 0;\r\n}\r\n.mftcc-fixed-drawer .mftcc-fixed-menu-mark {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n.mftcc-fixed-drawer .mftcc-main-drawer {\r\n width: 80px;\r\n background-color: #ffffff;\r\n box-shadow: -4px 0px 8px 4px rgba(0, 0, 0, 0.08);\r\n}\r\n.mftcc-fixed-drawer .mftcc-main-drawer .mftcc-fixed-menu {\r\n display: block;\r\n top: 10px;\r\n position: absolute;\r\n height: 100%;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item {\r\n width: 80px;\r\n height: 70px;\r\n margin: 5px 0px;\r\n position: relative;\r\n font-size: 14px;\r\n color: #141414;\r\n text-align: center;\r\n cursor: pointer;\r\n border-bottom: 1px solid #e8e8e8;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item:hover {\r\n color: #409eff;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item\r\n i {\r\n margin: 0px 10px;\r\n height: 30px;\r\n line-height: 30px;\r\n font-size: 20px;\r\n}\r\n.mftcc-fixed-drawer\r\n .mftcc-main-drawer\r\n .mftcc-fixed-menu\r\n .mftcc-fixed-menu-item\r\n span {\r\n display: block;\r\n}\r\n/* 悬浮菜单 结束*/\r\n/* 悬浮菜单进入动画 开始 */\r\n/* .mftcc-fixed-menu-transition-enter-active {\r\n transition: all .50s ease;\r\n}\r\n.mftcc-fixed-menu-transition-enter {\r\n transform: translateX(80px);\r\n} */\r\n.mftcc-fixed-menu-transition-enter-active {\r\n transition: right 0.5s ease;\r\n}\r\n.mftcc-fixed-menu-transition-enter {\r\n right: -80px;\r\n}\r\n.mftcc-fixed-menu-transition-enter-to {\r\n right: 0px;\r\n}\r\n/* 悬浮菜单进入动画 结束*/\r\n\r\n/* 动态列表页面样式开始 */\r\n.mftcc-list .mftcc-dynamic-insert-div {\r\n padding: 10px;\r\n border-bottom: 1px solid #ddd;\r\n}\r\n.mftcc-list .mftcc-dynamic-insert-div .el-button--primary {\r\n padding: 6px 10px;\r\n}\r\n.mftcc-list .dynamic-table {\r\n margin: 0;\r\n}\r\n/* 动态列表页面样式开始 */\r\n\r\n/* 列表页面样式开始 */\r\n.mftcc-list {\r\n background-color: #f2f2f4;\r\n}\r\n.mftcc-list .mftcc-dynamic-form {\r\n padding: 0;\r\n padding-bottom: 20px;\r\n margin: 0px 10px;\r\n background: none;\r\n}\r\n.mftcc-list .mftcc-search-form {\r\n padding: 20px 20px;\r\n margin: 10px 10px;\r\n background-color: #fff;\r\n}\r\n.mftcc-list .mftcc-search-form .el-row {\r\n width: 100%;\r\n}\r\n.mftcc-list .mftcc-list-table {\r\n background-color: #fff;\r\n margin: 0 10px 10px;\r\n display: flex;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div {\r\n padding: 14px 0px 14px 20px;\r\n /* \tborder-bottom: 1px solid #e3e3e3; */\r\n position: relative;\r\n text-align: right;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div > span {\r\n float: left;\r\n font-size: 18px;\r\n line-height: 30px;\r\n display: block;\r\n}\r\n.mftcc-list .mftcc-list-table .mftcc-insert-div .mftcc-insert-button {\r\n background-color: #fff;\r\n border-radius: 0px;\r\n color: #aaa;\r\n height: 36px;\r\n border: 1px solid #ddd;\r\n padding: 6px 18px;\r\n margin-right: 22px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-list .mftcc-search-form .search-button button {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n border-radius: 0px;\r\n height: 100%;\r\n float: right;\r\n padding: 10px 20px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-list .mftcc-search-form .custom-search {\r\n width: 100%;\r\n}\r\n\r\n/* 列表页面样式结束 */\r\n.mftcc-form-header {\r\n font-size: 14px;\r\n width: 100%;\r\n padding-top: 0;\r\n background: #fff;\r\n line-height: 46px;\r\n text-align: left;\r\n padding-left: 15px;\r\n box-sizing: border-box;\r\n border-bottom: 1px solid #e8e8e8;\r\n color: #141414;\r\n}\r\n.mftcc-tab .mftcc-container .mftcc-form-header {\r\n border: none;\r\n}\r\n.mftcc-tab .el-tabs__header {\r\n margin-bottom: 5px;\r\n}\r\n/* 按钮样式开始 */\r\n.el-button--primary {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n border-radius: 0px;\r\n padding: 10px 20px;\r\n}\r\n\r\n.el-button--primary:hover {\r\n background-color: #4a7ec3;\r\n border-color: #4a7ec3;\r\n}\r\n\r\n.el-button--default {\r\n border-radius: 0px;\r\n padding: 10px 20px;\r\n}\r\n/* 按钮样式结束 */\r\n\r\n/*tab样式开始*/\r\n.mftcc-tab {\r\n height: calc(100% - 50px);\r\n}\r\n.mftcc-tab .el-tabs.el-tabs--top {\r\n height: calc(100% - 58px);\r\n}\r\n/* 头部全局样式开始 */\r\n.el-page-header {\r\n padding-left: 10px;\r\n line-height: 50px;\r\n border-bottom: 1px solid #e1e2e3;\r\n color: #666;\r\n}\r\n.el-page-header__left::after {\r\n width: 0;\r\n}\r\n/* 头部全局样式结束 */\r\n.mftcc-tab .el-tabs__nav-wrap {\r\n padding: 0 10px;\r\n}\r\n.mftcc-tab .el-tabs__item.is-active {\r\n color: #4a7ec3;\r\n font-size: 14px;\r\n padding: 0 20px !important;\r\n top: 0;\r\n}\r\n.mftcc-tab .el-tabs__active-bar {\r\n background-color: #4a7ec3;\r\n padding: 0 20px;\r\n left: -20px;\r\n bottom: 0px;\r\n}\r\n.mftcc-tab .el-tabs__item {\r\n font-size: 12px;\r\n padding: 0 20px !important;\r\n top: 0px;\r\n height: 30px;\r\n line-height: 30px;\r\n}\r\n.mftcc-tab .el-tabs__nav-wrap::after {\r\n height: 0;\r\n}\r\n.mftcc-tab .el-tabs__content {\r\n padding: 0 10px;\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n.mftcc-tab .el-tabs__content .el-tab-pane {\r\n border: none;\r\n box-shadow: none;\r\n min-height: calc(100% - 10px);\r\n}\r\n.mftcc-tab .mftcc-list .mftcc-search-form {\r\n margin: 10px 0px;\r\n}\r\n.mftcc-tab .mftcc-list .mftcc-list-table {\r\n margin: 0 0 10px;\r\n}\r\n.mftcc-form-tips {\r\n line-height: 40px;\r\n font-size: 12px;\r\n color: #e72b00;\r\n width: 70%;\r\n margin: 0 auto;\r\n padding-left: 40px;\r\n}\r\n/*tab样式结束*/\r\n\r\n/*滚动条样式*/\r\n::-webkit-scrollbar {\r\n /*滚动条整体样式*/\r\n width: 8px; /*高宽分别对应横竖滚动条的尺寸*/\r\n height: 8px;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n /*滚动条里面小方块*/\r\n border-radius: 5px;\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n background: rgba(0, 0, 0, 0.2);\r\n}\r\n::-webkit-scrollbar-track {\r\n /*滚动条里面轨道*/\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n border-radius: 0;\r\n background: rgba(0, 0, 0, 0.1);\r\n}\r\n/* 滚动条样式结束 */\r\n/* 详情页面样式开始 */\r\n.mftcc-details {\r\n background-color: #f2f2f4;\r\n padding: 10px;\r\n /* min-height: 100%; */\r\n /* display: table; \r\n width: 100%;*/\r\n}\r\n.mftcc-details .mftcc-details-card {\r\n background-color: #fff;\r\n min-height: 130px;\r\n margin-bottom: 10px;\r\n padding: 10px;\r\n}\r\n.mftcc-details .mftcc-details-card .mftcc-details-header {\r\n margin-bottom: 2px;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info {\r\n min-height: 200px; /* \r\n background-color: #F8F9FC; */\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-tag--dark.el-tag--success,\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-button--mini,\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .el-tag--medium {\r\n height: 24px;\r\n line-height: 22px;\r\n padding: 0 16px;\r\n border-radius: 16px;\r\n text-align: center;\r\n}\r\n\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .mftcc-details-header-img {\r\n text-align: center;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-info\r\n .mftcc-details-header-img\r\n img {\r\n height: 132px;\r\n width: 132px;\r\n border-radius: 50%;\r\n margin-top: 20px;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom {\r\n height: 32px;\r\n background-color: #e0f4f7;\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom\r\n button {\r\n border: none;\r\n background: none;\r\n margin: 0px;\r\n padding: 0px 10px;\r\n font-size: 14px;\r\n font-weight: 400;\r\n color: #4a7ec3;\r\n height: 100%;\r\n}\r\n.mftcc-details\r\n .mftcc-details-card\r\n .mftcc-details-header\r\n .mftcc-details-header-bottom\r\n button:hover {\r\n color: #4a7ec3;\r\n background-color: #d0e9ed;\r\n border-color: #adadad;\r\n}\r\n.mftcc-details .el-collapse {\r\n border: none;\r\n}\r\n.mftcc-details .el-collapse-item {\r\n margin-bottom: 0;\r\n}\r\n.mftcc-details .el-collapse-item .el-collapse-item__content {\r\n padding-bottom: 0px;\r\n}\r\n.mftcc-details .el-collapse-item__header {\r\n height: 40px;\r\n border-bottom: 0;\r\n background: rgba(64, 158, 255, 0.15);\r\n}\r\n.mftcc-details .el-collapse-item__wrap {\r\n padding: 0;\r\n border: none;\r\n}\r\n.mftcc-details .mftcc-collapse-title {\r\n width: calc(100% - 3px);\r\n height: 37px;\r\n margin-left: 15px;\r\n line-height: 37px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n position: relative;\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-arrow-up:before {\r\n content: url(../../images/slideClose.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-arrow-down:before {\r\n content: url(../../images/slideOpen.png);\r\n}\r\n\r\n.mftcc-details .mftcc-collapse-title .el-icon-plus:before {\r\n content: url(../../images/plus.png);\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-edit-outline {\r\n position: absolute;\r\n right: 30px;\r\n top: 10px;\r\n}\r\n.mftcc-details .mftcc-collapse-title .el-icon-edit-outline:before {\r\n content: \"编辑\";\r\n color: #409eff;\r\n font-size: 14px;\r\n}\r\n.mftcc-details .mftcc-collapse-info {\r\n /* min-height: 200px; */\r\n}\r\n.mftcc-details .mftcc-collapse-table-info {\r\n display: flex;\r\n}\r\n.mftcc-details .mftcc-collapse-title i:first-child {\r\n color: #409eff;\r\n margin-left: 0px;\r\n margin-right: 0;\r\n position: relative;\r\n top: 2px;\r\n font-size: 22px;\r\n}\r\n.mftcc-details .mftcc-collapse-title i:last-child {\r\n font-size: 20px;\r\n float: right;\r\n margin-top: 9px;\r\n margin-right: 10px;\r\n}\r\n.mftcc-details .el-collapse-item__arrow {\r\n display: none;\r\n}\r\n/* 详情页面样式结束 */\r\n/* 基础增改查看页面样式开始 */\r\n.mftcc-container .el-container {\r\n border: none !important;\r\n width: 70%;\r\n margin: 0px auto;\r\n padding: 0px 20px 80px;\r\n}\r\n.mftcc-container .el-header {\r\n height: auto !important;\r\n}\r\n.mftcc-container .mftcc-container-button {\r\n position: fixed;\r\n bottom: 10px;\r\n width: calc(100% - 20px) !important;\r\n left: 10px !important;\r\n background-color: #fafafa;\r\n height: 50px;\r\n -webkit-box-sizing: border-box;\r\n box-sizing: border-box;\r\n z-index: 100;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n padding: 0;\r\n}\r\n/* .mftcc-container .mftcc-container-button .el-button.el-button--primary,.mftcc-container .mftcc-container-button .el-button.el-button--default {\r\n background: #4a71e3;\r\n border: 1px solid #E1E2E3;\r\n width: 100px;\r\n line-height: 32px;\r\n font-size: 14px;\r\n color: #fff;\r\n padding: 0;\r\n cursor: pointer;\r\n}\r\n.mftcc-container .mftcc-container-button .el-button.el-button--primary:hover,.mftcc-container .mftcc-container-button .el-button.el-button--default:hover {\r\n\tbackground: #36629c;\r\n} */\r\n.mftcc-container .mftcc-container-button .el-button.el-button--default {\r\n background: #ffffff !important;\r\n color: #3d3d3d !important;\r\n border: 1px solid #cccccc !important;\r\n margin-left: 10px;\r\n}\r\n\r\n.mftcc-container .el-row {\r\n width: 100%;\r\n}\r\n/* 基础增改查看页面样式结束 */\r\n/* 公共样式 */\r\nbutton.el-button.el-button--primary {\r\n background-color: #409eff;\r\n color: #ffffff;\r\n border: none;\r\n border-radius: 4px;\r\n margin-left: 10px;\r\n min-width: 68px;\r\n height: 32px;\r\n padding: 0 15px;\r\n}\r\nbutton.el-button.el-button--default {\r\n color: #3d3d3d;\r\n background-color: #fff;\r\n border: 1px solid #cccccc;\r\n border-radius: 4px;\r\n margin-left: 10px;\r\n min-width: 68px;\r\n height: 32px;\r\n padding: 0 15px;\r\n}\r\nbutton.el-button.el-button--primary:focus,\r\nbutton.el-button.el-button--primary:hover {\r\n background-color: #5cacff;\r\n color: #ffffff;\r\n}\r\nbutton.el-button.el-button--primary:active {\r\n background-color: #3686d9;\r\n color: #bac8d9;\r\n}\r\nbutton.el-button.el-button--default:focus,\r\nbutton.el-button.el-button--default:hover {\r\n background-color: #fff;\r\n color: #409eff;\r\n border-color: #409eff38;\r\n}\r\nbutton.el-button.el-button--default:active {\r\n border-color: #409eff;\r\n}\r\n.mftcc-form .el-input.is-disabled .el-input__inner,\r\n.mftcc-form .el-textarea.is-disabled .el-textarea__inner,\r\n.mftcc-form .el-switch.is-disabled,\r\n.mftcc-form .el-checkbox-group.is-disabled,\r\n.mftcc-form .el-radio-group.is-disabled {\r\n background-color: #fafafa;\r\n border-color: transparent;\r\n color: #cccccc !important;\r\n cursor: not-allowed;\r\n height: 100% !important;\r\n border-radius: 0;\r\n}\r\n.el-dropdown-menu {\r\n min-width: 200px;\r\n}\r\n.el-dropdown-menu .el-dropdown-menu__item {\r\n margin: 0;\r\n padding: 5px 16px;\r\n}\r\n.v-modal {\r\n opacity: 0.35;\r\n}\r\n.el-dialog__wrapper {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.el-dialog {\r\n margin: 0 !important;\r\n border-radius: 8px;\r\n max-width: 90%;\r\n max-height: 90%;\r\n}\r\n.el-dialog > .el-dialog__header {\r\n padding: 0;\r\n min-height: 54px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background: rgba(24, 144, 255, 0.06);\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__title {\r\n color: rgba(0, 0, 0, 0.85);\r\n line-height: 22px;\r\n font-size: 16px;\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__headerbtn {\r\n top: 14px;\r\n font-size: 24px;\r\n}\r\n.el-dialog > .el-dialog__header > .el-dialog__headerbtn > .el-dialog__close {\r\n color: #3d3d3d;\r\n font-weight: 700;\r\n}\r\n.el-dialog > .el-dialog__body {\r\n padding: 0;\r\n}\r\n.el-dialog > .el-dialog__footer {\r\n padding: 0;\r\n min-height: 52px;\r\n background: rgba(24, 144, 255, 0.06);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.el-dialog > .el-dialog__footer .el-button {\r\n min-width: 100px;\r\n}\r\n.el-select-dropdown__item.hover,\r\n.el-select-dropdown__item:hover {\r\n background-color: #ecf5ff;\r\n}\r\n.el-textarea__inner {\r\n overflow: auto;\r\n}\r\n",".mftcc-layout-menu {\r\n height: 100%;\r\n overflow-x: hidden;\r\n}\r\n.mftcc-layout-menu .menu{\r\n z-index: 100;\r\n width: 100px;\r\n min-height: 100%;\r\n overflow: hidden;\r\n background-color: #101D29;\r\n}\r\n.mftcc-layout-menu .el-scrollbar__bar {\r\n z-index: 101;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item{\r\n margin-bottom: 1px;\r\n padding: 0 !important;\r\n color: #fff;\r\n height: 60px;\r\n\twidth: 100px;\r\n line-height: initial;\r\n display: flex;\r\n flex-wrap: wrap;\r\n\tbox-sizing: border-box;\r\n\tpadding-left:22px!important;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:hover{\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:focus{\r\n background: none;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item.is-active{\r\n position: relative;\r\n background: url(../../images/jiantou.png) no-repeat 0px -6px;\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item i{\r\n position: relative;\r\n top: 22px;\r\n display: block;\r\n font-family: 'Glyphicons Halflings';\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 1;\r\n color: #fff;\r\n font-size: 16px;\r\n width: 16px;\r\n\theight: 16px;\r\n\tfloat: left;\r\n margin: 0;\r\n\tmargin-right: 8px;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item span{\r\n font-size: 14px;\r\n text-align: center;\r\n display: block;\r\n width:auto;\r\n line-height: 60px;\r\n\tfloat: left;\r\n}\r\n\r\n.mftcc-layout-menu .mftcc-multilevel-menu{\r\n background-color: rgb(255, 255, 255);\r\n height: calc(100% - 55px);\r\n width: 200px;\r\n position: absolute;\r\n top: 55px;\r\n left: 100px;\r\n box-shadow: 4px 0px 4px #c0c4cc;\r\n z-index: 99;\r\n overflow-y: auto;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-item{\r\n width: 90%;\r\n margin: 0 auto;\r\n border-bottom: 1px solid #F1F1F3;\r\n padding: 15px 0 15px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-mask{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute;\r\n left: 0;\r\n z-index: 98;\r\n top: 0;\r\n}\r\n.second-menu-title span{\r\n color: #333;\r\n width: 140px;\r\n text-align: left;\r\n font-size: 14px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 36px;\r\n padding-left: 15px;\r\n}\r\n\r\n.second-menu-title span:hover{\r\n color: #4a7ec3;\r\n}\r\n\r\n.three-menu-title:hover{\r\n color: #4a7ec3;\r\n}\r\n\r\n.three-menu-title {\r\n color: #333;\r\n text-align: left;\r\n font-size: 12px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 32px;\r\n margin-left: 25px;\r\n}\r\n\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter-active,\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-active {\r\n transition: all .3s ease;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter, .mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-to{\r\n transform: translateX(-200px);\r\n}",".mftcc-layout-menu {\r\n height: 100%;\r\n overflow-x: hidden;\r\n}\r\n.mftcc-layout-menu .menu{\r\n z-index: 100;\r\n width: 100px;\r\n min-height: 100%;\r\n overflow: hidden;\r\n background-color: #101D29;\r\n}\r\n.mftcc-layout-menu .el-scrollbar__bar {\r\n z-index: 101;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item{\r\n margin-bottom: 1px;\r\n padding: 0 !important;\r\n color: #fff;\r\n height: 60px;\r\n\twidth: 100px;\r\n line-height: initial;\r\n display: -webkit-box;\r\n display: -ms-flexbox;\r\n display: flex;\r\n -ms-flex-wrap: wrap;\r\n flex-wrap: wrap;\r\n\t-webkit-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tpadding-left:22px!important;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:hover{\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item:focus{\r\n background: none;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item.is-active{\r\n position: relative;\r\n background: url(../../images/jiantou.png) no-repeat 0px -6px;\r\n background-color: rgba(64, 158, 255, 0.45);\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item i{\r\n position: relative;\r\n top: 22px;\r\n display: block;\r\n font-family: 'Glyphicons Halflings';\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 1;\r\n color: #fff;\r\n font-size: 16px;\r\n width: 16px;\r\n\theight: 16px;\r\n\tfloat: left;\r\n margin: 0;\r\n\tmargin-right: 8px;\r\n}\r\n.mftcc-layout-menu .menu>.el-menu-item span{\r\n font-size: 14px;\r\n text-align: center;\r\n display: block;\r\n width:auto;\r\n line-height: 60px;\r\n\tfloat: left;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu{\r\n background-color: rgb(255, 255, 255);\r\n height: calc(100% - 55px);\r\n width: 200px;\r\n position: absolute;\r\n top: 55px;\r\n left: 100px;\r\n -webkit-box-shadow: 4px 0px 4px #c0c4cc;\r\n box-shadow: 4px 0px 4px #c0c4cc;\r\n z-index: 99;\r\n overflow-y: auto;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-item{\r\n width: 90%;\r\n margin: 0 auto;\r\n border-bottom: 1px solid #F1F1F3;\r\n padding: 15px 0 15px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-mask{\r\n height: 100%;\r\n width: 100%;\r\n position: absolute;\r\n left: 0;\r\n z-index: 98;\r\n top: 0;\r\n}\r\n.second-menu-title span{\r\n color: #333;\r\n width: 140px;\r\n text-align: left;\r\n font-size: 14px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 36px;\r\n padding-left: 15px;\r\n}\r\n.second-menu-title span:hover{\r\n color: #4a7ec3;\r\n}\r\n.three-menu-title:hover{\r\n color: #4a7ec3;\r\n}\r\n.three-menu-title {\r\n color: #333;\r\n text-align: left;\r\n font-size: 12px;\r\n cursor: pointer;\r\n display: block;\r\n line-height: 32px;\r\n margin-left: 25px;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter-active,\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-active {\r\n -webkit-transition: all .3s ease;\r\n transition: all .3s ease;\r\n}\r\n.mftcc-layout-menu .mftcc-multilevel-menu-transition-enter, .mftcc-layout-menu .mftcc-multilevel-menu-transition-leave-to{\r\n -webkit-transform: translateX(-200px);\r\n transform: translateX(-200px);\r\n}","\r\n/* fade */\r\n.fade-enter-active,\r\n.fade-leave-active {\r\n transition: opacity 0.28s;\r\n}\r\n\r\n.fade-enter,\r\n.fade-leave-active {\r\n opacity: 0;\r\n}\r\n\r\n/* fade-transform */\r\n.fade-transform-leave-active,\r\n.fade-transform-enter-active {\r\n transition: all .25s;\r\n}\r\n\r\n.fade-transform-enter {\r\n opacity: 0;\r\n transform: translateX(-30px);\r\n}\r\n\r\n.fade-transform-leave-to {\r\n opacity: 0;\r\n transform: translateX(30px);\r\n}\r\n\r\n/* breadcrumb transition */\r\n.breadcrumb-enter-active,\r\n.breadcrumb-leave-active {\r\n transition: all .5s;\r\n}\r\n\r\n.breadcrumb-enter,\r\n.breadcrumb-leave-active {\r\n opacity: 0;\r\n transform: translateX(20px);\r\n}\r\n\r\n.breadcrumb-move {\r\n transition: all .5s;\r\n}\r\n\r\n.breadcrumb-leave-active {\r\n position: absolute;\r\n}\r\n","\r\n/* fade */\r\n.fade-enter-active,\r\n.fade-leave-active {\r\n -webkit-transition: opacity 0.28s;\r\n transition: opacity 0.28s;\r\n}\r\n.fade-enter,\r\n.fade-leave-active {\r\n opacity: 0;\r\n}\r\n/* fade-transform */\r\n.fade-transform-leave-active,\r\n.fade-transform-enter-active {\r\n -webkit-transition: all .25s;\r\n transition: all .25s;\r\n}\r\n.fade-transform-enter {\r\n opacity: 0;\r\n -webkit-transform: translateX(-30px);\r\n transform: translateX(-30px);\r\n}\r\n.fade-transform-leave-to {\r\n opacity: 0;\r\n -webkit-transform: translateX(30px);\r\n transform: translateX(30px);\r\n}\r\n/* breadcrumb transition */\r\n.breadcrumb-enter-active,\r\n.breadcrumb-leave-active {\r\n -webkit-transition: all .5s;\r\n transition: all .5s;\r\n}\r\n.breadcrumb-enter,\r\n.breadcrumb-leave-active {\r\n opacity: 0;\r\n -webkit-transform: translateX(20px);\r\n transform: translateX(20px);\r\n}\r\n.breadcrumb-move {\r\n -webkit-transition: all .5s;\r\n transition: all .5s;\r\n}\r\n.breadcrumb-leave-active {\r\n position: absolute;\r\n}\r\n","<template>\r\n <div\r\n style=\"\r\n width: 100%;\r\n flex-grow: 1;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n \"\r\n >\r\n <div\r\n class=\"mftcc-form-search\"\r\n v-if=\"option.modelType == 'queryModel' && queryModelShow\"\r\n >\r\n <el-row style=\"width: 100%\">\r\n <el-col :span=\"20\" style=\"min-height: 100px; display: flex; align-items: center\">\r\n <el-form\r\n label-position=\"right\"\r\n label-width=\"130px\"\r\n ref=\"searchForm\"\r\n style=\"width: 100%\"\r\n :model=\"searchData\"\r\n >\r\n <template v-for=\"col in option.columns\">\r\n <el-col\r\n :span=\"\r\n isEmpty(option.searchColCut) || option.searchColCut <= 1\r\n ? 24\r\n : Math.floor(24 / option.searchColCut)\r\n \"\r\n v-if=\"col.isQuery\"\r\n :key=\"col.prop\"\r\n >\r\n <form-item\r\n :props=\"col\"\r\n v-model=\"searchData[col.prop]\"\r\n :designer=\"true\"\r\n :isQuery=\"true\"\r\n class=\"widgets\"\r\n >\r\n </form-item>\r\n </el-col>\r\n </template>\r\n </el-form>\r\n </el-col>\r\n <el-col :span=\"4\">\r\n <div class=\"search-button\">\r\n <el-button class=\"searchBtn\" type=\"primary\" @click=\"searchTableData\"\r\n >查询</el-button\r\n >\r\n </div>\r\n </el-col>\r\n <el-col :span=\"4\" style=\"margin-top: 10px\">\r\n <div class=\"search-button\">\r\n <el-button class=\"searchBtn\" type=\"primary\" @click=\"resetSearchData\"\r\n >重置</el-button\r\n >\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n <div\r\n class=\"mftcc-form-buttom\"\r\n v-if=\"\r\n option.modelType == 'queryModel' ||\r\n (option.modelType == 'dynamicModel' && option.customBtns.length > 0)\r\n \"\r\n :class=\"option.modelType\"\r\n >\r\n <span\r\n v-if=\"option.modelType == 'queryModel'\"\r\n style=\"position: absolute; left: 20px; top: 10px\"\r\n >{{ option.tableName }}</span\r\n >\r\n <template v-for=\"(btn, index) in option.customBtns\">\r\n <el-button\r\n :key=\"index\"\r\n class=\"optbtn\"\r\n type=\"primary\"\r\n v-if=\"$hasPerm(btn.perm || true)\"\r\n @click=\"Fn(btn.callback)\"\r\n >\r\n {{ btn.label }}\r\n </el-button>\r\n </template>\r\n <div class=\"sysBtns\" v-if=\"option.modelType == 'queryModel'\">\r\n <template v-if=\"option.isEdit\">\r\n <el-button\r\n type=\"primary\"\r\n icon=\"el-icon-plus\"\r\n size=\"mini\"\r\n @click=\"addTableRow\"\r\n >{{ editTableInsertLabel }}</el-button\r\n >\r\n <el-button\r\n type=\"primary\"\r\n icon=\"el-icon-check\"\r\n size=\"mini\"\r\n @click=\"saveTableRows\"\r\n >{{ editTableSaveLabel }}</el-button\r\n >\r\n <template v-if=\"option.editType == 'all'\">\r\n <el-button\r\n v-if=\"tableIsEdit == false\"\r\n type=\"primary\"\r\n icon=\"el-icon-edit\"\r\n size=\"mini\"\r\n @click=\"editTableRows\"\r\n >{{ editTableUpdateLabel }}</el-button\r\n >\r\n <el-button\r\n v-else\r\n type=\"primary\"\r\n icon=\"el-icon-close\"\r\n size=\"mini\"\r\n @click=\"cancelTableRows\"\r\n >{{ editTableCancelLabel }}</el-button\r\n >\r\n </template>\r\n </template>\r\n <el-button\r\n v-if=\"option.isExport\"\r\n type=\"primary\"\r\n class=\"exportBtn\"\r\n icon=\"el-icon-download\"\r\n @click=\"exportTable\"\r\n >导出</el-button\r\n >\r\n <el-dropdown\r\n size=\"small\"\r\n v-if=\"option.isDColumn\"\r\n :hide-on-click=\"false\"\r\n class=\"el-dropdown-DColumn\"\r\n trigger=\"click\"\r\n >\r\n <el-button icon=\"el-icon-setting\" type=\"primary\" class=\"mftcc-table-dropdown\"\r\n >设置</el-button\r\n >\r\n <el-dropdown-menu slot=\"dropdown\" style=\"text-align: center\">\r\n <div style=\"text-align: left\">\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-dropdown-item :key=\"index\" v-if=\"col.prop != ''\">\r\n <el-checkbox\r\n :checked=\"col.isShow\"\r\n v-model=\"col.isShow\"\r\n @change=\"checkChange(col)\"\r\n >{{ col.label }}</el-checkbox\r\n >\r\n </el-dropdown-item>\r\n </template>\r\n </div>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"mftcc-form-tools\" v-if=\"option.modelType == 'dynamicModel'\">\r\n <div class=\"mftcc-form-tools-item\">\r\n <div class=\"tabs\" v-if=\"option.queryTabs && option.queryTabs.length > 0\">\r\n <el-tabs v-model=\"option.tabActiveName\" @tab-click=\"queryTabClick\">\r\n <el-tab-pane\r\n v-for=\"tab in option.queryTabs\"\r\n :key=\"tab.id\"\r\n :label=\"tab.label\"\r\n :name=\"tab.id\"\r\n >\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n </div>\r\n <div class=\"mftcc-form-tools-item\">\r\n <div class=\"dynamicQuery\" v-if=\"option.isDynamicQuery\">\r\n <el-input\r\n placeholder=\"请输入查询条件\"\r\n v-model=\"dynamicQuery\"\r\n @keyup.enter.native=\"searchTableData\"\r\n >\r\n <i\r\n slot=\"suffix\"\r\n @click=\"searchTableData\"\r\n class=\"el-input__icon el-icon-search\"\r\n ></i>\r\n </el-input>\r\n </div>\r\n <div class=\"sysBtns\" v-if=\"option.isExport || option.isDColumn\">\r\n <template v-if=\"option.isEdit\">\r\n <el-button\r\n type=\"primary\"\r\n icon=\"el-icon-plus\"\r\n size=\"mini\"\r\n @click=\"addTableRow\"\r\n >{{ editTableInsertLabel }}</el-button\r\n >\r\n <el-button\r\n type=\"primary\"\r\n icon=\"el-icon-check\"\r\n size=\"mini\"\r\n @click=\"saveTableRows\"\r\n >{{ editTableSaveLabel }}</el-button\r\n >\r\n <template v-if=\"option.editType == 'all'\">\r\n <el-button\r\n v-if=\"tableIsEdit == false\"\r\n type=\"primary\"\r\n icon=\"el-icon-edit\"\r\n size=\"mini\"\r\n @click=\"editTableRows\"\r\n >{{ editTableUpdateLabel }}</el-button\r\n >\r\n <el-button\r\n v-else\r\n type=\"primary\"\r\n icon=\"el-icon-close\"\r\n size=\"mini\"\r\n @click=\"cancelTableRows\"\r\n >{{ editTableCancelLabel }}</el-button\r\n >\r\n </template>\r\n </template>\r\n <el-button\r\n v-if=\"option.isExport\"\r\n type=\"primary\"\r\n class=\"exportBtn\"\r\n icon=\"el-icon-download\"\r\n @click=\"exportTable\"\r\n >导出</el-button\r\n >\r\n <el-dropdown\r\n size=\"small\"\r\n v-if=\"option.isDColumn\"\r\n :hide-on-click=\"false\"\r\n class=\"el-dropdown-DColumn\"\r\n trigger=\"click\"\r\n >\r\n <el-button icon=\"el-icon-setting\" type=\"primary\" class=\"mftcc-table-dropdown\"\r\n >设置</el-button\r\n >\r\n <el-dropdown-menu slot=\"dropdown\" style=\"text-align: center\">\r\n <div style=\"text-align: left\">\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-dropdown-item :key=\"index\" v-if=\"col.prop != ''\">\r\n <el-checkbox\r\n :checked=\"col.isShow\"\r\n v-model=\"col.isShow\"\r\n @change=\"checkChange(col)\"\r\n >{{ col.label }}</el-checkbox\r\n >\r\n </el-dropdown-item>\r\n </template>\r\n </div>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n v-loading=\"isLoading\"\r\n ref=\"mftccTable\"\r\n :class=\"option.query === 'query' ? 'mftcc-table-query' : 'mftcc-table'\"\r\n >\r\n <el-form :rules=\"rules\" :model=\"option\" ref=\"ruleForm\">\r\n <el-table\r\n :data=\"option.tableData\"\r\n :max-height=\"maxHeight\"\r\n :height=\"height\"\r\n highlight-current-row\r\n :ref=\"option.tableId\"\r\n style=\"width: 100%\"\r\n empty-text=\"暂无数据\"\r\n :row-key=\"option.treeKey\"\r\n :tree-props=\"{ children: 'children', hasChildren: 'hasChildren' }\"\r\n :row-style=\"rowStyle\"\r\n :row-class-name=\"rowClassName\"\r\n :cell-style=\"cellStyle\"\r\n :cell-class-name=\"cellClassName\"\r\n :class=\"option.isExpand ? 'isExpand' : ''\"\r\n @current-change=\"currentChange\"\r\n @selection-change=\"$emit('selection-change', $event)\"\r\n @row-dblclick=\"rowDblclick\"\r\n @expand-change=\"expandChange\"\r\n >\r\n <el-table-column\r\n v-if=\"option.isSelect != '' && option.isSelect ? option.isSelect : false\"\r\n type=\"selection\"\r\n fixed\r\n width=\"55\"\r\n >\r\n </el-table-column>\r\n <el-table-column v-if=\"option.isExpand\" type=\"expand\">\r\n <template slot-scope=\"scope\">\r\n <mftcc-form\r\n :initData=\"expandFormData\"\r\n :parentVm=\"this\"\r\n :ref=\"'expandForm_' + scope.$index\"\r\n :class=\"option.expandType == 'edit' ? 'expandEditForm' : ''\"\r\n ></mftcc-form>\r\n <template v-if=\"option.expandType == 'edit'\">\r\n <div style=\"text-align: center; margin-top: 5px\">\r\n <el-button type=\"primary\" @click=\"saveExpandFormData(scope.$index)\"\r\n >保存</el-button\r\n >\r\n <el-button @click=\"closeExpand(scope.$index)\">取消</el-button>\r\n </div>\r\n </template>\r\n </template>\r\n </el-table-column>\r\n <template v-for=\"(col, index) in option.columns\">\r\n <el-table-column\r\n v-if=\"col.prop != '' ? col.isShow : false\"\r\n :key=\"index\"\r\n :prop=\"col.prop\"\r\n :label=\"col.label\"\r\n :show-overflow-tooltip=\"\r\n col['show-overflow-tooltip'] === true ? true : false\r\n \"\r\n :min-width=\"col.minWidth\"\r\n :fixed=\"col.fixed || false\"\r\n :align=\"col.align || 'left'\"\r\n :width=\"col.width\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <template v-if=\"scope.row.isEdit === true && !col.disableEdit\">\r\n <el-form-item\r\n :prop=\"'tableData.' + scope.$index + '.' + col.prop\"\r\n :rules=\"rules[col.prop]\"\r\n >\r\n <component\r\n :is=\"$Component[col.fieldType]\"\r\n v-model=\"scope.row[col.prop]\"\r\n :props=\"col\"\r\n :designer=\"true\"\r\n >\r\n </component>\r\n </el-form-item>\r\n </template>\r\n <template v-else-if=\"col.isHref === true\">\r\n <template v-if=\"col.href.path\">\r\n <a href=\"javascript:void(0)\" @click=\"router(col.href, scope.row)\">{{\r\n tableFormatter(scope.row[col.prop], col)\r\n }}</a>\r\n </template>\r\n <template v-else-if=\"col.href.callbackType\">\r\n <a\r\n href=\"javascript:void(0)\"\r\n @click=\"Fn(col.href.callbackType, scope.$index, scope.row)\"\r\n >{{ tableFormatter(scope.row[col.prop], col) }}</a\r\n >\r\n </template>\r\n <template v-else>\r\n <span>{{ tableFormatter(scope.row[col.prop], col) }}</span>\r\n </template>\r\n </template>\r\n <template v-else-if=\"col.fieldType === 'switch'\">\r\n <el-switch\r\n v-model=\"scope.row[col.prop]\"\r\n :active-value=\"\r\n switchValue(scope.row[col.prop], col.switchValue.activeValue, true)\r\n \"\r\n :inactive-value=\"\r\n switchValue(\r\n scope.row[col.prop],\r\n col.switchValue.inActiveValue,\r\n false\r\n )\r\n \"\r\n :disabled=\"\r\n isEmpty(col.switchValue.readOnly) ? false : col.switchValue.readOnly\r\n \"\r\n @change=\"Fn(col.switchValue.changeEvent, scope.$index, scope.row)\"\r\n ></el-switch>\r\n </template>\r\n <template v-else>\r\n <span>{{ tableFormatter(scope.row[col.prop], col) }}</span>\r\n </template>\r\n </template>\r\n </el-table-column>\r\n </template>\r\n <el-table-column\r\n v-if=\"option.isOptBtns === true\"\r\n :fixed=\"option.isExpand ? false : 'right'\"\r\n label=\"操作\"\r\n align=\"center\"\r\n >\r\n <template slot-scope=\"scope\">\r\n <template v-for=\"(btn, index) in option.optBtns\">\r\n <el-button\r\n :key=\"index\"\r\n size=\"mini\"\r\n :disabled=\"buttonAuth(btn, scope.row)\"\r\n v-if=\"$hasPerm(btn.perm || true)\"\r\n @click=\"Fn(btn.callback, scope.$index, scope.row)\"\r\n >{{ btn.label }}</el-button\r\n >\r\n </template>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-form>\r\n <el-pagination\r\n v-if=\"option.isPagination\"\r\n background\r\n :hide-on-single-page=\"option.isNoDataPagination\"\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n :page-size=\"pageSize\"\r\n :current-page=\"pageNo\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n :total=\"pageTotal\"\r\n >\r\n </el-pagination>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { postJsonNoLoading, postJson, getParameter } from \"../../../axios\";\r\nimport formUtil from \"../../../utils/formUtil\";\r\nexport default {\r\n data() {\r\n return {\r\n option: {},\r\n searchData: {},\r\n maxHeight: null,\r\n height: null,\r\n pageNo: 1,\r\n pageSize: 10,\r\n pageTotal: 0,\r\n currentRow: null,\r\n isEmpty: formUtil.isEmpty,\r\n pramDicItem: {},\r\n exportHeader: [],\r\n exportField: [],\r\n dynamicQuery: \"\",\r\n oldTabActiveName: \"\",\r\n isLoading: false,\r\n queryModelShow: false,\r\n editWatch: null,\r\n editTableData: null,\r\n tableIsEdit: false,\r\n editTableInsertLabel: \"新增行\",\r\n editTableSaveLabel: \"保存\",\r\n editTableUpdateLabel: \"编辑\",\r\n editTableCancelLabel: \"取消\",\r\n rules: {},\r\n expandFormData: {},\r\n };\r\n },\r\n props: {\r\n tableId: {\r\n type: String,\r\n required: \"\",\r\n },\r\n initData: {\r\n type: Object,\r\n },\r\n initSearchData: {\r\n type: Object,\r\n default: function () {\r\n return {};\r\n },\r\n },\r\n parentVm: {\r\n type: Object,\r\n required: true,\r\n },\r\n },\r\n watch: {\r\n tableId: {\r\n handler(val, oldVal) {\r\n if (val) {\r\n this.initTable(() => {\r\n this.$emit(\"callback\");\r\n });\r\n }\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n initData: {\r\n handler(val, oldVal) {\r\n if (!this.tableId && val) {\r\n this.initTable();\r\n }\r\n },\r\n immediate: true,\r\n },\r\n },\r\n methods: {\r\n isNumber(val) {\r\n var regPos = /^\\d+(\\.\\d+)?$/; //非负浮点数\r\n var regNeg = /^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数\r\n if (regPos.test(val) || regNeg.test(val)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n switchValue(value, prop, state) {\r\n if (this.isEmpty(prop)) {\r\n return state;\r\n }\r\n if (typeof value == \"number\") {\r\n return Number(prop);\r\n }\r\n return prop;\r\n },\r\n queryTabClick(tab, event) {\r\n let tabData = this.option.queryTabs[tab.index];\r\n let data = {};\r\n if (!this.isEmpty(tabData.fieldName)) {\r\n data[tabData.fieldName] = tabData.value;\r\n }\r\n if (this.oldTabActiveName) {\r\n let tabs = this.option.queryTabs.filter(\r\n (item) => item.id == this.oldTabActiveName\r\n );\r\n if (tabs.length > 0) {\r\n delete this.searchData[tabs[0].fieldName];\r\n }\r\n }\r\n this.oldTabActiveName = tabData.id;\r\n this.search(data);\r\n },\r\n searchTableData() {\r\n this.search();\r\n },\r\n resetSearchData() {\r\n this.searchData = {};\r\n this.$nextTick(() => {\r\n this.$refs.searchForm.resetFields();\r\n this.$nextTick(() => {\r\n this.searchTableData();\r\n });\r\n });\r\n },\r\n rowStyle(obj) {\r\n let event = this.option[\"row-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n rowClassName(obj) {\r\n let event = this.option[\"row-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n cellStyle(obj) {\r\n let event = this.option[\"cell-style\"];\r\n if (Object.prototype.toString.call(event) === \"[object Object]\") {\r\n return event;\r\n } else if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n }\r\n },\r\n cellClassName(obj) {\r\n let event = this.option[\"cell-class-style\"];\r\n if (event && formUtil.parentVmExist(this, event)) {\r\n return this.parentVm._self[event](obj);\r\n } else {\r\n return event;\r\n }\r\n },\r\n buttonAuth(btn, row) {\r\n let buttonAuth = false;\r\n let auth = btn.noShowParams || \"\";\r\n let authArray = auth.split(\";\");\r\n for (let i in authArray) {\r\n if (!this.isEmpty(authArray[i])) {\r\n let authObj = authArray[i].split(\"-\");\r\n if (authObj.length === 2) {\r\n if (\r\n this.$store.getters.buttonAuth &&\r\n this.$store.getters.buttonAuth[authObj[0]] == authObj[1]\r\n ) {\r\n buttonAuth = true;\r\n } else if (row[authObj[0]] == authObj[1]) {\r\n buttonAuth = true;\r\n }\r\n }\r\n }\r\n }\r\n return buttonAuth;\r\n },\r\n tableFormatter(cellValue, item) {\r\n let _this = this;\r\n let value = \"\";\r\n if (_this.isEmpty(cellValue)) {\r\n return cellValue;\r\n } else {\r\n value = cellValue;\r\n }\r\n let parmArray = _this.pramDicItem[item.prop];\r\n if (item.fieldType === \"checkbox\" || item.fieldType === \"multipleSelection\") {\r\n let checkBoxValue = \"\";\r\n let checkArray;\r\n if (Array.isArray(cellValue)) {\r\n checkArray = cellValue;\r\n } else {\r\n checkArray = cellValue.split(\"|\");\r\n }\r\n for (let h in checkArray) {\r\n if (!_this.isEmpty(checkArray[h])) {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === checkArray[h]) {\r\n if (checkBoxValue === \"\") {\r\n checkBoxValue = parmArray[i][\"optName\"];\r\n } else {\r\n checkBoxValue = parmArray[i][\"optName\"] + \"|\" + checkBoxValue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n value = checkBoxValue;\r\n } else if (item.fieldType === \"text\") {\r\n if (item.dataType === \"money(yuan)\") {\r\n value = formUtil.formatMoney(cellValue);\r\n } else if (item.dataType === \"money(wan)\") {\r\n value = formUtil.formatMoney(Number(cellValue) / 10000, 4);\r\n } else if (item.dataType === \"percentile\") {\r\n value = formUtil.numMulti(cellValue, 100) + \"%\";\r\n } else if (item.dataType === \"thousand\") {\r\n value = formUtil.numMulti(cellValue, 1000) + \"‰\";\r\n } else if (item.dataType === \"tenThousand\") {\r\n value = formUtil.numMulti(cellValue, 10000) + \"‱\";\r\n }\r\n } else if (item.fieldType === \"date\" || item.fieldType === \"dateGroup\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd\";\r\n let format = \"yyyy-MM-dd\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else if (item.fieldType === \"datetime\" || item.fieldType === \"datetimeGroup\") {\r\n try {\r\n let valueFormat = \"yyyyMMdd HH:mm:ss\";\r\n let format = \"yyyy-MM-dd HH:mm:ss\";\r\n if (!this.isEmpty(item.dateFormat)) {\r\n if (!this.isEmpty(item.dateFormat.valueFormat)) {\r\n valueFormat = item.dateFormat.valueFormat;\r\n }\r\n if (!this.isEmpty(item.dateFormat.format)) {\r\n format = item.dateFormat.format;\r\n }\r\n }\r\n value = formUtil.dateFormat(formUtil.formatDate(value, valueFormat), format);\r\n } catch (error) {\r\n console.error(item.fieldName + \"日期数据解析错误\");\r\n }\r\n } else {\r\n for (let i in parmArray) {\r\n if (parmArray[i][\"optCode\"] === cellValue) {\r\n value = parmArray[i][\"optName\"];\r\n }\r\n }\r\n }\r\n if (\r\n !_this.isEmpty(item.formatter) &&\r\n formUtil.parentVmExist(this, item.formatter)\r\n ) {\r\n value = this.parentVm._self[item.formatter](value);\r\n } else if (!_this.isEmpty(item.desensitization)) {\r\n value = formUtil.desensitization(value, item.desensitization);\r\n }\r\n return value;\r\n },\r\n Fn(method, index, row) {\r\n // this[method](index, row);\r\n //this.$emit('callback', method, index, row);\r\n if (formUtil.parentVmExist(this, method)) {\r\n this.parentVm._self[method](index, row);\r\n }\r\n },\r\n router(href, row) {\r\n let path = href.path;\r\n let query = {};\r\n let queryArr = href.query.split(\";\");\r\n for (let queryStr of queryArr) {\r\n let arr = queryStr.split(\"-\");\r\n let key = arr[0];\r\n let value = arr[1];\r\n if (value.startsWith(\"${\")) {\r\n value = value.substring(2, value.length - 1);\r\n }\r\n query[key] = row[value];\r\n }\r\n this.$router.push({ path: path, query: query });\r\n },\r\n tableResize() {\r\n if (this.option.isAutoHeight || this.option.height == \"auto\") {\r\n if (this.option.query == \"query\") {\r\n return;\r\n }\r\n if (!this.maxHeight) {\r\n this.maxHeight = this.$refs.mftccTable.offsetHeight;\r\n if (this.option.isPagination === true) {\r\n if ((this.maxHeight + \"\").endsWith(\"px\")) {\r\n this.maxHeight =\r\n Number(this.maxHeight.substring(0, this.maxHeight.length - 2)) - 40;\r\n } else {\r\n this.maxHeight = Number(this.maxHeight) - 40;\r\n }\r\n }\r\n if (this.maxHeight <= 0) {\r\n this.maxHeight = null;\r\n }\r\n }\r\n } else {\r\n this.height = this.option.height;\r\n this.maxHeight = this.option.maxHeight;\r\n }\r\n },\r\n getTableData(pageNo, pageSize, callback) {\r\n if (this.option.isLoading) {\r\n this.isLoading = true;\r\n }\r\n let tableSearchData = Object.assign({}, this.searchData);\r\n if (tableSearchData.dynamicQuery) {\r\n this.dynamicQuery = tableSearchData.dynamicQuery;\r\n }\r\n for (let key in tableSearchData) {\r\n if (typeof tableSearchData[key] == \"object\") {\r\n tableSearchData[key] = JSON.stringify(tableSearchData[key]);\r\n }\r\n }\r\n if (this.option.isPagination === true) {\r\n tableSearchData.pageNo = pageNo;\r\n tableSearchData.pageSize = pageSize;\r\n } else {\r\n tableSearchData.pageNo = 1;\r\n tableSearchData.pageSize = -1;\r\n }\r\n this.option.tableData = [];\r\n tableSearchData.dynamicQuery = this.dynamicQuery;\r\n tableSearchData.tableId = this.tableId;\r\n tableSearchData.initQuery = JSON.stringify(this.initSearchData);\r\n\r\n let url = this.option.url;\r\n if (url) {\r\n let urlArr = url.split(\"/\");\r\n let serverName = urlArr[0];\r\n if (!serverName) {\r\n urlArr.splice(0, 1);\r\n serverName = urlArr[0];\r\n }\r\n if (serverName.startsWith(\"mftcc-\")) {\r\n let serverType = serverName.split(\"-\")[1];\r\n if ($servers[serverType]) {\r\n urlArr.splice(0, 1);\r\n url = $servers[serverType] + \"/\" + urlArr.join(\"/\");\r\n }\r\n }\r\n postJsonNoLoading(\r\n url,\r\n tableSearchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n let dataList = res.list;\r\n this.option.tableData = dataList.records || dataList;\r\n this.option.tableData = this.resTreeData(this.option.tableData);\r\n this.editTableData = this.clone(this.option.tableData);\r\n this.pageNo = dataList.current; // 当前页数\r\n this.pageSize = dataList.size; // 每页数量\r\n this.pageTotal = dataList.total; // 页面总数\r\n let colList = res.colList;\r\n if (colList && colList.length > 0) {\r\n this.option.columns = colList;\r\n }\r\n }\r\n this.isLoading = false;\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n this.$nextTick(() => {\r\n this.$emit(\"initCallBack\", this);\r\n });\r\n },\r\n (error) => {\r\n this.isLoading = false;\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n if (typeof callback === \"function\") {\r\n this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n this.$nextTick(() => {\r\n this.$emit(\"initCallBack\", this);\r\n });\r\n }\r\n );\r\n }\r\n },\r\n resTreeData(data) {\r\n if (!this.option.isTree) {\r\n return data;\r\n }\r\n let result = [];\r\n for (let node of data) {\r\n if (!node[this.option.treeParentKey] || node[this.option.treeParentKey] == \"0\") {\r\n node.children = this.getTreeChilds(node[this.option.treeKey], data);\r\n result.push(node);\r\n }\r\n }\r\n return result;\r\n },\r\n getTreeChilds(id, data) {\r\n let childs = [];\r\n for (let node of data) {\r\n if (node[this.option.treeParentKey] == id) {\r\n childs.push(node);\r\n }\r\n }\r\n for (let child of childs) {\r\n let childs2 = this.getTreeChilds(child[this.option.treeKey], data); //递归获取子节点\r\n if (childs2.length > 0) {\r\n child.children = childs2;\r\n }\r\n }\r\n return childs;\r\n },\r\n refresh() {\r\n this.getTableData(this.pageNo, this.pageSize);\r\n },\r\n search(searchData) {\r\n this.pageNo = 1;\r\n this.pageSize = 10;\r\n this.pageTotal = 0;\r\n this.currentRow = null;\r\n if (!this.isEmpty(searchData)) {\r\n Object.assign(this.searchData, searchData);\r\n }\r\n this.getTableData(this.pageNo, this.pageSize);\r\n },\r\n handleSizeChange(val) {\r\n this.getTableData(1, val);\r\n },\r\n handleCurrentChange(val) {\r\n this.getTableData(val, this.pageSize);\r\n },\r\n checkChange(col) {\r\n console.log(col);\r\n },\r\n setSelectValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].clearSelection();\r\n } else if (arguments.length === 1) {\r\n this.setSelectValue(this.option.selectKey, arguments[0]);\r\n } else if (arguments.length === 2) {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(tableDatas[i]);\r\n }\r\n }\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n let value = arguments[1];\r\n if (!(arguments[1] instanceof Array)) {\r\n value = [arguments[1]];\r\n }\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n value.indexOf(tableDatas[i][selectKey]) > -1\r\n ) {\r\n this.$refs[this.option.tableId].toggleRowSelection(\r\n tableDatas[i],\r\n arguments[2]\r\n );\r\n }\r\n }\r\n }\r\n },\r\n getSelectValue() {\r\n let parmKeyArray = this.$refs[this.option.tableId].store.states.selection;\r\n return parmKeyArray;\r\n },\r\n setCurrentValue() {\r\n if (arguments.length === 0) {\r\n this.$refs[this.option.tableId].setCurrentRow();\r\n } else if (arguments.length === 1) {\r\n this.setCurrentValue(this.option.selectKey, arguments[0]);\r\n } else {\r\n let selectKey = arguments[0];\r\n let tableDatas = this.option.tableData;\r\n for (let i in tableDatas) {\r\n if (\r\n tableDatas[i][selectKey] !== undefined &&\r\n tableDatas[i][selectKey] === arguments[1]\r\n ) {\r\n this.$refs[this.option.tableId].setCurrentRow(tableDatas[i]);\r\n break;\r\n }\r\n }\r\n }\r\n },\r\n getCurrentValue() {\r\n return this.currentRow;\r\n },\r\n currentChange(currentRow, oldCurrentRow) {\r\n this.currentRow = currentRow;\r\n this.$emit(\"current-change\", currentRow, oldCurrentRow);\r\n },\r\n async initTable(callback) {\r\n let _this = this;\r\n this.option = {};\r\n this.maxHeight = null;\r\n this.height = null;\r\n this.pageNo = 1;\r\n this.pageSize = 10;\r\n this.pageTotal = 0;\r\n this.currentRow = null;\r\n this.queryModelShow = false;\r\n this.searchData = {};\r\n try {\r\n let jsonData;\r\n if (this.tableId) {\r\n jsonData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/table/\" + this.tableId + \".json\"\r\n );\r\n }\r\n if (jsonData) {\r\n this.option = JSON.parse(JSON.stringify(jsonData.data));\r\n } else {\r\n this.option = JSON.parse(JSON.stringify(this.$busDatas[this.tableId]));\r\n }\r\n } catch (error) {\r\n if (_this.initData === undefined) {\r\n this.$message.error(\r\n \"未找到 [ \" + this.tableId + \" ] 配置文件或配置文件格式错误\"\r\n );\r\n }\r\n }\r\n this.$nextTick(() => {\r\n this.tableResize();\r\n });\r\n if (_this.initData !== undefined) {\r\n this.option = Object.assign(this.option, this.initData);\r\n }\r\n this.searchData = Object.assign(this.searchData, this.initSearchData || {});\r\n if (this.option.modelType == \"dynamicModel\" && this.option.queryTabs.length > 0) {\r\n let tabs = this.option.queryTabs.filter(\r\n (item) => item.id == this.option.tabActiveName\r\n );\r\n if (tabs.length > 0 && !this.isEmpty(tabs[0].fieldName)) {\r\n this.searchData[tabs[0].fieldName] = tabs[0].value;\r\n this.oldTabActiveName = this.option.tabActiveName;\r\n }\r\n }\r\n if (this.option.modelType == \"queryModel\") {\r\n let columns = this.option.columns.filter((item) => item.isQuery === true);\r\n for (let col of columns) {\r\n this.$set(this.searchData, col.prop, col.value);\r\n }\r\n /* 判断是否存在固定列查询 */\r\n for (let col of this.option.columns) {\r\n if (col.isQuery) {\r\n this.queryModelShow = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let formItem = this.option.columns;\r\n let dicKeyArray = [];\r\n for (let i in formItem) {\r\n if (formItem[i].prop !== \"\") {\r\n //解析字典项\r\n let dicKey = formItem[i].dicKey;\r\n if (!this.isEmpty(dicKey) && formItem[i].optionType == \"2\") {\r\n let dicKeyObject = {};\r\n dicKeyObject.dicKey = dicKey;\r\n dicKeyObject.fieldName = formItem[i].prop;\r\n dicKeyArray.push(dicKeyObject);\r\n } else {\r\n this.$set(this.pramDicItem, formItem[i].prop, formItem[i].dicItem);\r\n }\r\n\r\n //获取库中选择字典\r\n if (\r\n formItem[i].optionType == \"3\" &&\r\n (formItem[i].fieldType === \"select\" ||\r\n formItem[i].fieldType === \"multipleSelection\") &&\r\n formItem[i].dataType === \"library\"\r\n ) {\r\n getParameter(formItem[i].library.url, { query: \"\" }, true, (reponse) => {\r\n if (reponse.code === 0) {\r\n let parmArray = [];\r\n let list = reponse.list;\r\n let realField = \"optCode\";\r\n let showField = \"optName\";\r\n if (!this.isEmpty(formItem[i].library.realField)) {\r\n realField = formItem[i].library.realField;\r\n }\r\n if (!this.isEmpty(formItem[i].library.showField)) {\r\n showField = formItem[i].library.showField;\r\n }\r\n for (let i in list) {\r\n let option = {\r\n optCode: list[i][realField],\r\n optName: list[i][showField],\r\n };\r\n parmArray.push(option);\r\n }\r\n this.$set(this.pramDicItem, formItem[i].prop, parmArray);\r\n }\r\n });\r\n }\r\n //解析校验规则\r\n this.resRules(formItem[i]);\r\n }\r\n }\r\n\r\n //请求字典json文件\r\n let keyArray = [];\r\n for (let j in dicKeyArray) {\r\n keyArray.push(dicKeyArray[j].dicKey);\r\n }\r\n formUtil.getParmDic(keyArray, (dicKeyData) => {\r\n for (let k in dicKeyArray) {\r\n _this.$set(\r\n _this.pramDicItem,\r\n dicKeyArray[k].fieldName,\r\n dicKeyData[dicKeyArray[k].dicKey]\r\n );\r\n }\r\n });\r\n\r\n let url = this.option.url;\r\n if (url !== undefined && url !== null && url !== \"\") {\r\n this.getTableData(this.pageNo, this.pageSize, callback);\r\n } else {\r\n if (typeof callback === \"function\") {\r\n this.$nextTick(() => {\r\n callback();\r\n });\r\n }\r\n this.$nextTick(() => {\r\n this.$emit(\"initCallBack\", this);\r\n });\r\n }\r\n\r\n if (this.option.isExpand) {\r\n const formId = this.option.expandFormId;\r\n try {\r\n let formData = await axios.get(\r\n formUtil.getFormProfilePath() + \"/form/\" + formId + \".json\"\r\n );\r\n if (formData) {\r\n this.expandFormData = formData.data;\r\n } else {\r\n this.expandFormData = this.$busDatas[_this.formId];\r\n }\r\n } catch (error) {\r\n this.$message.error(\"未找到 [ \" + formId + \" ] 配置文件或配置文件格式错误\");\r\n }\r\n\r\n if (this.option.expandType == \"readOnly\") {\r\n this.expandFormData.query = \"query\";\r\n } else if (this.option.expandType == \"edit\") {\r\n this.expandFormData.formDisabled = null;\r\n }\r\n this.expandFormData.isExpand = true;\r\n }\r\n },\r\n exportTable() {\r\n this.$confirm(\"确定要导出当前列表全部数据?\", \"提示\", {\r\n dangerouslyUseHTMLString: true,\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n })\r\n .then(() => {\r\n this.getExpportData();\r\n })\r\n .catch(() => {});\r\n },\r\n getExpportData() {\r\n let loading = this.$loading({\r\n lock: true,\r\n text: \"正在拼命导出......\",\r\n spinner: \"el-icon-loading\",\r\n background: \"rgba(0, 0, 0, 0.7)\",\r\n });\r\n\r\n let tableSearchData = Object.assign({}, this.searchData);\r\n for (let key in tableSearchData) {\r\n if (typeof tableSearchData[key] == \"object\") {\r\n tableSearchData[key] = JSON.stringify(tableSearchData[key]);\r\n }\r\n }\r\n tableSearchData.pageNo = 1;\r\n tableSearchData.pageSize = -1;\r\n tableSearchData.dynamicQuery = this.dynamicQuery;\r\n tableSearchData.tableId = this.option.tableId;\r\n tableSearchData.initQuery = JSON.stringify(this.initSearchData);\r\n\r\n findByPage(\r\n this.option.url,\r\n tableSearchData,\r\n true,\r\n (res) => {\r\n if (res.code == 0 && res.list.records.length > 0) {\r\n require.ensure([], () => {\r\n /* eslint-disable */\r\n // 这里的径路要修改正确\r\n const {\r\n export_json_to_excel,\r\n } = require(\"../../../plugins/Export2Excel.js\");\r\n /* eslint-enable */\r\n for (let c in this.option.columns) {\r\n if (this.option.columns[c].prop != \"\") {\r\n this.exportField.push(this.option.columns[c].prop);\r\n this.exportHeader.push(this.option.columns[c].label);\r\n }\r\n }\r\n let tableData = res.list.records;\r\n const data = this.formatJson(this.option.columns, tableData);\r\n export_json_to_excel(this.exportHeader, data, this.tableId);\r\n loading.close();\r\n });\r\n } else {\r\n this.$alert(res.msg, this.$alertTitle, {\r\n type: res.msgType,\r\n dangerouslyUseHTMLString: true,\r\n });\r\n loading.close();\r\n }\r\n },\r\n (error) => {\r\n console.log(error);\r\n loading.close();\r\n }\r\n );\r\n },\r\n formatJson(columns, tableData) {\r\n let data = tableData.map((data) => {\r\n return columns.map((col) => {\r\n if (col.prop != \"\") {\r\n let value = data[col.prop];\r\n return this.tableFormatter(value, col);\r\n } else {\r\n return null;\r\n }\r\n });\r\n });\r\n return data;\r\n },\r\n addTableRow() {\r\n let rowData = {};\r\n for (const columns of this.option.columns) {\r\n if (columns.prop) {\r\n rowData[columns.prop] = \"\";\r\n }\r\n }\r\n rowData.isEdit = true;\r\n rowData.isNewRow = true;\r\n this.option.tableData.push(rowData);\r\n this.$nextTick(function () {\r\n this.$refs[this.option.tableId];\r\n let bodyWrapper = this.$refs[this.option.tableId].$refs.bodyWrapper;\r\n bodyWrapper.scrollTop = bodyWrapper.scrollHeight;\r\n });\r\n },\r\n saveTableRows() {\r\n this.$confirm(\"确定要保存修改后的数据吗?\", \"提示\", {\r\n dangerouslyUseHTMLString: true,\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n })\r\n .then(() => {\r\n this.saveEditTable();\r\n })\r\n .catch(() => {});\r\n },\r\n saveEditTable() {\r\n const multipleSelection = {};\r\n for (const columns of this.option.columns) {\r\n if (columns.prop && columns.fieldType == \"multipleSelection\") {\r\n multipleSelection[columns.prop] = true;\r\n }\r\n }\r\n let insertTableData = [];\r\n let updateTableData = [];\r\n let tableData = this.clone(this.option.tableData);\r\n for (const r in tableData) {\r\n let row = tableData[r];\r\n for (const key in multipleSelection) {\r\n let value = row[key];\r\n if (Array.isArray(value)) {\r\n row[key] = value.join(\"|\");\r\n }\r\n }\r\n if (row.isEdit === true) {\r\n delete row.isEdit;\r\n if (row.isNewRow === true) {\r\n delete row.isNewRow;\r\n insertTableData.push(row);\r\n } else if (row.isEditRow === true) {\r\n delete row.isEditRow;\r\n updateTableData.push(row);\r\n }\r\n }\r\n }\r\n // console.log(insertTableData, updateTableData);\r\n if (insertTableData.length > 0 || updateTableData.length > 0) {\r\n this.$refs.ruleForm.validate((valid, object) => {\r\n if (valid) {\r\n postJson(\r\n this.option.editUrl,\r\n {\r\n insertData: insertTableData,\r\n updateData: updateTableData,\r\n editType: this.option.editType,\r\n },\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n for (const r in this.option.tableData) {\r\n let row = this.option.tableData[r];\r\n if (row.isEdit === true) {\r\n delete row.isEdit;\r\n if (row.isNewRow === true) {\r\n delete row.isNewRow;\r\n } else if (row.isEditRow === true) {\r\n delete row.isEditRow;\r\n }\r\n this.$set(this.option.tableData, r, row);\r\n }\r\n }\r\n this.editTableData = this.clone(this.option.tableData);\r\n this.$message.success(res.msg || \"保存成功\");\r\n let trDivs = document.querySelectorAll(\"tr[active=true]\");\r\n for (let i = 0; i < trDivs.length; i++) {\r\n trDivs[i].removeAttribute(\"active\");\r\n }\r\n this.tableIsEdit = false;\r\n }\r\n },\r\n (error) => {\r\n this.$message.error(error);\r\n }\r\n );\r\n } else {\r\n let validateMsg = [];\r\n for (let key in object) {\r\n let arr = object[key];\r\n for (let data of arr) {\r\n validateMsg.push(data.message);\r\n }\r\n }\r\n this.$message({\r\n duration: 5000,\r\n showClose: true,\r\n dangerouslyUseHTMLString: true,\r\n customClass: \"errorMessage\",\r\n message: validateMsg.join(\"<br/>\"),\r\n type: \"error\",\r\n });\r\n return false;\r\n }\r\n });\r\n } else {\r\n for (const r in this.option.tableData) {\r\n let row = this.option.tableData[r];\r\n if (row.isEdit === true) {\r\n delete row.isEdit;\r\n this.$set(this.option.tableData, r, row);\r\n }\r\n }\r\n this.tableIsEdit = false;\r\n }\r\n },\r\n editTableRows() {\r\n this.tableIsEdit = true;\r\n const multipleSelection = {};\r\n for (const columns of this.option.columns) {\r\n if (columns.prop && columns.fieldType == \"multipleSelection\") {\r\n multipleSelection[columns.prop] = true;\r\n }\r\n }\r\n for (const r in this.option.tableData) {\r\n let row = this.option.tableData[r];\r\n for (const key in multipleSelection) {\r\n let value = row[key];\r\n if (Array.isArray(value)) {\r\n row[key] = value;\r\n } else {\r\n row[key] = value.split(\"|\");\r\n }\r\n }\r\n row.isEdit = true;\r\n this.$set(this.option.tableData, r, row);\r\n }\r\n this.editWatcher();\r\n },\r\n cancelTableRows() {\r\n this.option.tableData = this.clone(this.editTableData);\r\n this.tableIsEdit = false;\r\n },\r\n rowDblclick(row, column, event) {\r\n if (!this.option.isEdit || this.option.editType != \"row\") {\r\n return;\r\n }\r\n let rowDiv = event.currentTarget;\r\n if (rowDiv.hasAttribute(\"active\")) {\r\n const rowIndex = rowDiv.rowIndex;\r\n rowDiv.removeAttribute(\"active\");\r\n this.$set(\r\n this.option.tableData,\r\n rowIndex,\r\n this.clone(this.editTableData[rowIndex])\r\n );\r\n return;\r\n } else {\r\n rowDiv.setAttribute(\"active\", true);\r\n }\r\n const multipleSelection = {};\r\n for (const columns of this.option.columns) {\r\n if (columns.prop && columns.fieldType == \"multipleSelection\") {\r\n multipleSelection[columns.prop] = true;\r\n }\r\n }\r\n for (const key in multipleSelection) {\r\n let value = row[key];\r\n if (Array.isArray(value)) {\r\n row[key] = value;\r\n } else {\r\n row[key] = value.split(\"|\");\r\n }\r\n }\r\n this.editWatcher();\r\n this.$set(row, \"isEdit\", true);\r\n },\r\n editWatcher() {\r\n if (this.editWatch != null) {\r\n this.editWatch();\r\n }\r\n this.editWatch = this.$watch(\"option.tableData\", {\r\n handler(val, oldVal) {\r\n for (const i in val) {\r\n let rowData = val[i];\r\n if (\r\n rowData.isEdit &&\r\n !rowData.isNewRow &&\r\n !this.isObjEqual(rowData, this.editTableData[i])\r\n ) {\r\n rowData.isEditRow = true;\r\n }\r\n }\r\n },\r\n deep: true,\r\n });\r\n },\r\n clone(data) {\r\n return JSON.parse(JSON.stringify(data));\r\n },\r\n isObjEqual(o1, o2) {\r\n let object = this.clone(o1);\r\n delete object.isEdit;\r\n delete object.isNewRow;\r\n delete object.isEditRow;\r\n var props1 = Object.getOwnPropertyNames(object);\r\n // var props2 = Object.getOwnPropertyNames(o2);\r\n // if (props1.length != props2.length) {\r\n // return false;\r\n // }\r\n for (var i = 0, max = props1.length; i < max; i++) {\r\n var propName = props1[i];\r\n // if (propName == \"isEdit\" || propName == \"isEditRow\" || propName == \"isNewRow\") {\r\n // continue;\r\n // }\r\n let v1 = o1[propName];\r\n let v2 = o2[propName];\r\n if (Array.isArray(v1)) {\r\n v1 = v1.join(\"|\");\r\n }\r\n if (Array.isArray(v2)) {\r\n v2 = v2.join(\"|\");\r\n }\r\n if (v1 !== v2) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n resRules(formField) {\r\n let formRules = formField.rules;\r\n let label = formField.label;\r\n try {\r\n //解析规则\r\n let fieldNameRules = [];\r\n if (formField.fieldType === \"text\") {\r\n let type = formField.dataType;\r\n if (type === \"int\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateInt;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"long\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateLong;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (\r\n type == \"double(2)\" ||\r\n type == \"double(4)\" ||\r\n type == \"double(6)\" ||\r\n type == \"money(fen)\" ||\r\n type == \"money(jiao)\" ||\r\n type == \"money(wan)\" ||\r\n type == \"money(baiwan)\" ||\r\n type == \"money(yi)\" ||\r\n type == \"percentile\" ||\r\n type === \"thousand\" ||\r\n type == \"tenThousand\"\r\n ) {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateNumber;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"float\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateFloat;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type == \"boolean\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateBoolean;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n } else if (type === \"money(yuan)\") {\r\n let fieldNameRule = {};\r\n fieldNameRule[\"validator\"] = formUtil.validateMoney;\r\n fieldNameRule[\"trigger\"] = \"blur\";\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n }\r\n\r\n for (let k in formRules) {\r\n let fieldNameRule = {};\r\n let trigger = \"change\";\r\n let message = \"\";\r\n let type = \"\";\r\n if (formRules[k].type === \"required\") {\r\n if (!this.isEmpty(formField[\"formItem\"])) {\r\n formField[\"formItem\"].required = true;\r\n }\r\n fieldNameRule[\"required\"] = true;\r\n // trigger = \"blur\";\r\n message = label + \"不能为空\";\r\n } else if (formRules[k].type === \"validator\") {\r\n if (formUtil.parentVmExist(this, formRules[k].validator)) {\r\n fieldNameRule[\"validator\"] = this.parentVm._self[formRules[k].validator];\r\n }\r\n // trigger = \"blur\";\r\n } else if (formRules[k].type === \"number\") {\r\n // trigger = \"blur\";\r\n message = label + \"必须为数字\";\r\n type = \"number\";\r\n } else if (formRules[k].type === \"email\") {\r\n // trigger = \"blur\";\r\n message = label + \"格式不正确\";\r\n type = \"email\";\r\n } else if (formRules[k].type === \"phone\") {\r\n // trigger = \"blur\";\r\n message = \"请输入正确的手机号码\";\r\n fieldNameRule[\"pattern\"] = /^1[123456789]\\d{9}$/;\r\n } else if (formRules[k].type === \"mobile\") {\r\n // trigger = \"blur\";\r\n message = \"请输入正确的电话\";\r\n fieldNameRule[\"pattern\"] = /^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$/;\r\n } else if (formRules[k].type === \"idNo\") {\r\n // trigger = \"blur\";\r\n fieldNameRule[\"validator\"] = formUtil.validateIdNo;\r\n } else {\r\n //continue\r\n }\r\n\r\n if (\r\n formField.fieldType === \"checkbox\" ||\r\n formField.fieldType === \"multipleSelection\"\r\n ) {\r\n type = \"array\";\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].min) && !this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message =\r\n label +\r\n \"长度必须大于等于\" +\r\n formRules[k].min +\r\n \"并且小于等于\" +\r\n formRules[k].max;\r\n } else if (!this.isEmpty(formRules[k].min)) {\r\n fieldNameRule[\"min\"] = formRules[k].min;\r\n message = label + \"长度必须大于等于\" + formRules[k].min;\r\n } else if (!this.isEmpty(formRules[k].max)) {\r\n fieldNameRule[\"max\"] = formRules[k].max;\r\n message = label + \"长度必须小于等于\" + formRules[k].max;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].message)) {\r\n message = formRules[k].message;\r\n }\r\n fieldNameRule[\"message\"] = message;\r\n\r\n if (!this.isEmpty(type)) {\r\n fieldNameRule[\"type\"] = type;\r\n }\r\n\r\n if (!this.isEmpty(formRules[k].trigger)) {\r\n trigger = formRules[k].trigger;\r\n }\r\n fieldNameRule[\"trigger\"] = trigger;\r\n\r\n fieldNameRules.push(fieldNameRule);\r\n }\r\n this.$set(this.rules, formField.prop, fieldNameRules);\r\n } catch (error) {\r\n console.error(\"规则解析错误:\" + error);\r\n this.$set(this.rules, formField.prop, []);\r\n }\r\n },\r\n expandChange(row, expanded) {\r\n if (!this.option.isExpand) {\r\n return;\r\n }\r\n if (!row.isExpand) {\r\n let rowIndex = null;\r\n for (const i in this.option.tableData) {\r\n let rowData = this.option.tableData[i];\r\n if (this.isObjEqual(rowData, row)) {\r\n rowIndex = i;\r\n break;\r\n }\r\n }\r\n if (rowIndex == null) {\r\n return;\r\n }\r\n this.$nextTick(() => {\r\n let form = this.$refs[\"expandForm_\" + rowIndex];\r\n form.setFormValue(this.clone(row));\r\n });\r\n row.isExpand = true;\r\n } else {\r\n delete row.isExpand;\r\n }\r\n },\r\n closeExpand(index) {\r\n this.$refs[this.option.tableId].toggleRowExpansion(\r\n this.option.tableData[index],\r\n false\r\n );\r\n },\r\n saveExpandFormData(index) {\r\n const formId = \"expandForm_\" + index;\r\n let form = this.$refs[formId];\r\n form.validateForm((state) => {\r\n if (state) {\r\n let data = form.getFormValue();\r\n const url = this.option.expandFormUrl;\r\n if (!url) {\r\n this.$message.warning(\"未配置表单保存请求地址\");\r\n return;\r\n }\r\n postJson(\r\n url,\r\n data,\r\n true,\r\n (res) => {\r\n if (res.code == 0) {\r\n Object.assign(this.option.tableData[index], data);\r\n this.closeExpand(index);\r\n this.$message.success(res.msg);\r\n } else {\r\n this.$message.error(res.msg);\r\n }\r\n },\r\n (error) => {\r\n this.$message.error(error);\r\n }\r\n );\r\n }\r\n });\r\n },\r\n },\r\n};\r\n</script>\r\n<style>\r\n.mftcc-table .el-checkbox__label {\r\n font-size: 12px;\r\n}\r\n/* .mftcc-table.nothingModel{\r\n margin-top: 10px;\r\n padding-top: 8px;\r\n} */\r\n.mftcc-table .exportBtn {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table .el-pagination {\r\n margin-top: 5px;\r\n}\r\n.mftcc-table .mftcc-table-dropdown {\r\n padding: 6px 10px;\r\n border-radius: 4px;\r\n}\r\n.mftcc-table-query .el-table__body,\r\n.mftcc-table .el-table__body {\r\n width: calc(100% - 4px) !important;\r\n}\r\n.errorMessage .el-message__content {\r\n line-height: 20px;\r\n}\r\n.errorMessage .el-message__closeBtn {\r\n top: 24px;\r\n}\r\n</style>\r\n"]}
|