- import { ref, reactive, nextTick } from 'vue'
- export default function useTable(proxy, uuidv4) {
- const router = useRouter();
- const treeData = ref([])
- const visible = ref(false)
- const curRow = ref({})
- const form = reactive({
- name: ''
- })
- const newName = ref('')
- const operateInfo = reactive({
- width: '0%',
- level: '',
- type: '',
- text: ''
- })
- let rowExpansionInfo = []
- const getTreeDataCurRow = (data, row, treeDataCurRow) => {
- if(!row?.nodeCode || row.nodeCode === '0') {
- treeDataCurRow.value = { children: data }
- return
- }
- for (const item of data) {
- if(row.nodeCode === item.nodeCode){
- treeDataCurRow.value = item
- break
- }
- if(item.children){
- getTreeDataCurRow(item.children, row, treeDataCurRow)
- }
- }
- }
-
- const getTreeCurRow = (data, row) => {
- let treeDataCurRow = { value: {} }
- getTreeDataCurRow(data, row, treeDataCurRow)
- return treeDataCurRow.value
- }
-
- const goBack = (route, path) => {
- proxy.$tab.closePage(route)
- router.push(path)
- }
-
- const close = () => {
- curRow.value = {}
- operateInfo.level = ''
- operateInfo.type = ''
- operateInfo.text = ''
- restForm()
- visible.value = false
- }
-
- const restForm = () => {
- proxy.$refs.dialogFormRef.resetFields()
- }
-
- const statusChange = (row, val) => {
- const treeDataCurRow = getTreeCurRow(treeData.value, row)
- setTreeDataStatus(treeDataCurRow, val)
- }
-
- const setTreeDataStatus = (row, status) => {
- row.status = status
- if(status === '0'){
- row.enableTime = ''
- row.stopTime = proxy.moment().format("YYYY-MM-DD HH:mm:ss")
- } else if(status === '1'){
- row.enableTime = proxy.moment().format("YYYY-MM-DD HH:mm:ss")
- row.stopTime = ''
- }
- if(row.children){
- for (const item of row.children) {
- item.statusDisabled = status === '0'
- if(status === '0') {
- setTreeDataStatus(item, '0')
- }
- }
- }
- }
-
- const setStatusDisabled = (data) => {
- for (const item1 of data) {
- const children1 = item1.children || []
- item1.statusDisabled = false
- for (const item2 of children1) {
- const children2 = item2.children || []
- if(item1.status === '0' && item2.status === '0'){
- item2.statusDisabled = true
- } else {
- item2.statusDisabled = false
- }
- for (const item3 of children2) {
- if(item2.status === '0' && item3.status === '0'){
- item3.statusDisabled = true
- } else {
- item3.statusDisabled = false
- }
- }
- }
- }
- }
-
- const canOperateChange = (row, val) => {
- const treeDataCurRow = getTreeCurRow(treeData.value, row)
- setTreeDataCanOperate(treeDataCurRow, val)
- }
-
- const setTreeDataCanOperate = (row, canOperate) => {
- row.canOperate = canOperate
- if(row.children){
- for (const item of row.children) {
- item.canOperateDisabled = canOperate === 0
- if(canOperate === 0) {
- setTreeDataCanOperate(item, 0)
- }
- }
- }
- }
-
- const setCanOperateDisabled = (data) => {
- for (const item1 of data) {
- const children1 = item1.children || []
- item1.canOperateDisabled = false
- for (const item2 of children1) {
- const children2 = item2.children || []
- if(item1.canOperate === 0 && item2.canOperate === 0){
- item2.canOperateDisabled = true
- } else {
- item2.canOperateDisabled = false
- }
- for (const item3 of children2) {
- if(item2.canOperate === 0 && item3.canOperate === 0){
- item3.canOperateDisabled = true
- } else {
- item3.canOperateDisabled = false
- }
- }
- }
- }
- }
-
- const copy = (row) => {
- const treeDataCurRow = getTreeCurRow(treeData.value, row)
- const treeDataCurParentRow = getTreeCurRow(treeData.value, { nodeCode: row.parentNodeCode })
- proxy.$modal
- .confirm("是否确认复制?")
- .then(async () => {
- const index = treeDataCurParentRow.children.indexOf(treeDataCurRow)
- const data = JSON.parse(JSON.stringify(row))
- data.nodeCode = uuidv4()
- treeDataCurParentRow.children.splice(index, 0, data)
- treeDataCurParentRow.children.forEach((it, i, arr) => {
- it.sort = arr.length - i
- })
- computedScore(treeDataCurParentRow.nodeCode)
- })
- .catch(() => {});
- }
-
- const del = (row) => {
- const treeDataCurRow = getTreeCurRow(treeData.value, row)
- const treeDataCurParentRow = getTreeCurRow(treeData.value, { nodeCode: row.parentNodeCode })
- proxy.$modal
- .confirm("是否确认删除?")
- .then(async () => {
- const index = treeDataCurParentRow.children.indexOf(treeDataCurRow)
- treeDataCurParentRow.children.splice(index, 1)
- treeDataCurParentRow.children.forEach((it, i, arr) => {
- it.sort = arr.length - i
- })
- computedScore(treeDataCurParentRow.nodeCode)
- })
- .catch(() => {});
- }
-
- const getSortIsDisabled = (row, order) => {
- const treeDataCurRow = getTreeCurRow(treeData.value, row)
- const treeDataCurParentRow = getTreeCurRow(treeData.value, { nodeCode: row.parentNodeCode })
- const index = treeDataCurParentRow.children.indexOf(treeDataCurRow)
- if(order === 'ascending'){
- return index === 0
- } else {
- return index === treeDataCurParentRow.children.length - 1
- }
- }
-
- const ascHandle = (row) => {
- const treeDataCurRow = getTreeCurRow(treeData.value, row)
- const treeDataCurParentRow = getTreeCurRow(treeData.value, { nodeCode: row.parentNodeCode })
- const index = treeDataCurParentRow.children.indexOf(treeDataCurRow)
- const preData = treeDataCurParentRow.children[index - 1]
- const temp = treeDataCurRow.sort
- treeDataCurRow.sort = preData.sort
- preData.sort = temp
- treeDataCurParentRow.children.sort((a, b) => {
- return b.sort - a.sort
- })
- }
-
- const descHandle = (row) => {
- const treeDataCurRow = getTreeCurRow(treeData.value, row)
- const treeDataCurParentRow = getTreeCurRow(treeData.value, { nodeCode: row.parentNodeCode })
- const index = treeDataCurParentRow.children.indexOf(treeDataCurRow)
- const nextData = treeDataCurParentRow.children[index + 1]
- const temp = treeDataCurRow.sort
- treeDataCurRow.sort = nextData.sort
- nextData.sort = temp
- treeDataCurParentRow.children.sort((a, b) => {
- return b.sort - a.sort
- })
- }
-
- const search = () => {
- newName.value = '@#$%^&*'
- rowExpansionInfo = []
- nextTick(() => {
- newName.value = form.name
- rowExpansionInfo = []
- nextTick(() => {
- if(!rowExpansionInfo.length) return
- for (const item of rowExpansionInfo) {
- rowExpansion(item.row)
- }
- const minIndex = Math.min(...rowExpansionInfo.map(it => it.index))
- tableScrollToRow(minIndex)
- })
- })
- }
-
- const resetQuery = () => {
- proxy.$refs.ruleForm.resetFields()
- newName.value = ''
- rowExpansionInfo = []
- }
-
- const formatSearch = (row, index, str) => {
- return str.replace(new RegExp(newName.value, 'ig'), function($1) {
- if($1 && !rowExpansionInfo.find(it => it.nodeCode === row.nodeCode)) rowExpansionInfo.push({ index, row })
- return `<span class="light">${$1}</span>`;
- });
- }
-
- const rowExpansion = (row) => {
- const treeDataCurParentRow = getTreeCurRow(treeData.value, { nodeCode: row.parentNodeCode })
- proxy.$refs.tableRef.toggleRowExpansion(treeDataCurParentRow, true)
- if(treeDataCurParentRow.parentNodeCode === '0') return
- rowExpansion(treeDataCurParentRow)
- }
-
- const tableScrollToRow = (rowIndex) => {
- const scrollbarWrapper = proxy.$refs.tableRef.$el.querySelector('.el-table__body-wrapper .el-scrollbar .el-scrollbar__wrap')
- const theTableRows = scrollbarWrapper.querySelectorAll('.el-table__body tbody .el-table__row')
- let scrollTop = 0
- for (let i = 0; i < theTableRows.length; i++) {
- if (i === rowIndex) {
- break
- }
- scrollTop += theTableRows[i].offsetHeight
- }
- if(scrollTop > scrollbarWrapper.offsetHeight) {
- scrollbarWrapper.scrollTop = scrollTop
- }
- }
-
- const computedScore = (parentNodeCode) => {
- if(parentNodeCode === '0') return
- const treeDataCurParentRow = getTreeCurRow(treeData.value, { nodeCode: parentNodeCode })
- if(treeDataCurParentRow.level === '0') { //root
- const evaluationTypeScore = treeDataCurParentRow.children.reduce((pre, item) => {
- return pre += item.evaluationContentScore * 1
- }, 0)
- treeDataCurParentRow.evaluationTypeScore = evaluationTypeScore > 0 ? evaluationTypeScore + '' : ''
- } else if(treeDataCurParentRow.level === '1') {
- const evaluationContentScore = treeDataCurParentRow.children.reduce((pre, item) => {
- return pre += item.evaluationRuleScore * 1
- }, 0)
- treeDataCurParentRow.evaluationContentScore = evaluationContentScore > 0 ? evaluationContentScore + '' : ''
-
- const rootRow = getTreeCurRow(treeData.value, { nodeCode: treeDataCurParentRow.parentNodeCode })
- const evaluationTypeScore = rootRow.children.reduce((pre, item) => {
- return pre += item.evaluationContentScore * 1
- }, 0)
- rootRow.evaluationTypeScore = evaluationTypeScore > 0 ? evaluationTypeScore + '' : ''
- }
- }
-
- const forTableData = (data,isExpand) => {
- data.forEach(item =>{
- proxy.$refs.tableRef.toggleRowExpansion(item,isExpand);
- if(item.children){
- forTableData(item.children,isExpand)
- }
- })
- }
- // 展开
- const expand = () => {
- forTableData(treeData.value,true)
- }
- // 校验提交数据
- const checkData = (data) => {
- // const list1 = []
- let flag = false
- for (const item1 of data) {
- const children1 = item1.children || []
- if(!children1.length) return flag = true
- // const list2 = []
- for (const item2 of children1) {
- const children2 = item2.children || []
- if(!children2.length) return flag = true
- // if(children2.length) {
- // list2.push(item2)
- // }
- }
- // item1.children = list2
- // if(list2.length){
- // list1.push(item1)
- // }
- }
- return flag
- }
- const setMergeData = (data) => {
- let length1 = 0
- let length2 = 0
- for (const item1 of data) {
- const children1 = item1.children || []
- const sum = getSum(children1)
- length1 += sum
- for (const item2 of children1) {
- // item2.realScore= item2.scoreMap.realScore2
- const children2 = item2.children || []
- length2 += children2.length
- for (const item3 of children2) {
- item3.length1 = length1
- item3.sum1 = sum
- item3.length2 = length2
- item3.sum2 = children2.length
- }
- }
- }
- // data.map((k)=>{
- // if(k.itemLevel=='1') k.firstRealScore=k.realScore
- // })
- return data
- }
-
- const getSum = (data) => {
- let sum = 0
- for (const item of data) {
- const children = item.children || []
- for (const it of children) {
- sum++
- if(it.children) {
- getSum(it.children)
- }
- }
- }
- return sum
- }
- const tableData = computed(() => {
- const list = getFlatData(JSON.parse(JSON.stringify(treeData.value)))
- return list.filter(item => item.itemLevel=='3')
- })
-
- const getFlatData = (data) => {
- let list = []
- for (const item of data) {
-
- const children = item.children
- delete item.children
- list.push(item)
- if(children){
- list = list.concat(getFlatData(children))
- }
- }
- return list
- }
- const handleData = (data) =>{
- data.value.forEach((v, k,m) => {
- v[`itemContent${k}`]=v.itemContent;
- if(v.children){
- handleData(v.children)
- }
- })
- return data.value
-
- }
- return {
- handleData,
- form,
- treeData,
- visible,
- curRow,
- operateInfo,
- getTreeCurRow,
- search,
- resetQuery,
- goBack,
- close,
- statusChange,
- setStatusDisabled,
- canOperateChange,
- setCanOperateDisabled,
- getSortIsDisabled,
- copy,
- del,
- ascHandle,
- descHandle,
- formatSearch,
- computedScore,
- expand,
- checkData,
- setMergeData,
- tableData
- }
- }