Browse Source

查询机

master
xuhuajiao 3 weeks ago
parent
commit
7616e5de0a
  1. 19
      src/api/inquiryMachine/column.js
  2. 10
      src/api/inquiryMachine/content.js
  3. 141
      src/api/inquiryMachine/menu.js
  4. 145
      src/views/inquiryMachine/column.vue
  5. 292
      src/views/inquiryMachine/content.vue
  6. 156
      src/views/inquiryMachine/form.vue
  7. 465
      src/views/inquiryMachine/menu.vue
  8. 72
      src/views/inquiryMachine/sortDialog.vue

19
src/api/inquiryMachine/column.js

@ -1,8 +1,15 @@
import request from '@/utils/request' import request from '@/utils/request'
export function FetchInitQueryTopic() {
return request({
url: 'api/queryMachine/initQueryTopic',
method: 'get'
})
}
export function add(data) { export function add(data) {
return request({ return request({
url: 'api/fonds/editFonds',
url: 'api/queryMachine/editQueryTopic',
method: 'post', method: 'post',
data data
}) })
@ -10,7 +17,7 @@ export function add(data) {
export function edit(data) { export function edit(data) {
return request({ return request({
url: 'api/fonds/editFonds',
url: 'api/queryMachine/editQueryTopic',
method: 'post', method: 'post',
data data
}) })
@ -18,18 +25,18 @@ export function edit(data) {
export function del(data) { export function del(data) {
return request({ return request({
url: 'api/fonds/delFonds',
url: 'api/queryMachine/deleteQueryTopic',
method: 'post', method: 'post',
data data
}) })
} }
export function FetchUpdateFondsStatus(data) {
export function FetchQueryTopicStatus(data) {
return request({ return request({
url: 'api/fonds/updateFondsStatus',
url: 'api/queryMachine/changeQueryTopicStatus',
method: 'post', method: 'post',
data data
}) })
} }
export default { add, edit, del, FetchUpdateFondsStatus }
export default { FetchInitQueryTopic, add, edit, del, FetchQueryTopicStatus }

10
src/api/inquiryMachine/content.js

@ -1,4 +1,5 @@
import request from '@/utils/request' import request from '@/utils/request'
import qs from 'qs'
export function add(data) { export function add(data) {
return request({ return request({
@ -24,12 +25,11 @@ export function del(data) {
}) })
} }
export function FetchUpdateFondsStatus(data) {
export function FetchQueryTopicTree(params) {
return request({ return request({
url: 'api/fonds/updateFondsStatus',
method: 'post',
data
url: 'api/queryMachine/getQueryTopicTree' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
}) })
} }
export default { add, edit, del, FetchUpdateFondsStatus }
export default { add, edit, del, FetchQueryTopicTree }

141
src/api/inquiryMachine/menu.js

@ -0,0 +1,141 @@
import request from '@/utils/request'
// 获取门类树状菜单
export function FetchCategoryMenu() {
return request({
url: 'api/category/menu',
method: 'get'
})
}
// 获取门类下的子门类
export function FetchCategoryMenuChildren(cid) {
return request({
url: 'api/category/getChildren?categoryId=' + cid,
method: 'get'
})
}
// 新增门类
export function add(data) {
return request({
url: 'api/queryMachine/editQueryMenu',
method: 'post',
data
})
}
// 编辑门类
export function edit(data) {
return request({
url: 'api/queryMachine/editQueryMenu',
method: 'post',
data
})
}
// 删除门类
export function del(ids) {
const params = { id: ids[0] }
return request({
url: 'api/category/delete',
method: 'delete',
params
})
}
// 修改门类树状菜单
export function sort(data) {
return request({
url: 'api/category/sort',
method: 'put',
data
})
}
// 获取归档章版式
export function FetchGetFilingsealFormat() {
return request({
url: 'api/category/getFilingsealFormat',
method: 'get'
})
}
// 获取归档章详情
export function FetchGetFilingsealFormatDtails(filingId) {
return request({
url: 'api/category/getFilingsealFormatDtails?filingId=' + filingId,
method: 'get'
})
}
// 保存归档章
export function FetchEditCategoryFilingseal(data) {
return request({
url: 'api/category/editCategoryFilingseal',
method: 'post',
data
})
}
// 启用 / 关闭归档章
export function FetchEnabledFilingseal(data) {
return request({
url: 'api/category/enabledFilingseal',
method: 'post',
data
})
}
// 门类下得字段
export function FetchInitCategoryField(params) {
return request({
url: 'api/category/initCategoryField',
method: 'get',
params
})
}
export function FetchCategoryFieldManage(params) {
return request({
url: 'api/category/categoryFieldManage',
method: 'get',
params
})
}
// 著录界面排序
export function FetchUpardicSort(data) {
return request({
url: 'api/category/upardicSort',
method: 'put',
data
})
}
// 根据父级门类id获取门类字段
export function FetchInitCategoryFieldByPid(params) {
return request({
url: 'api/category/initCategoryFieldByPid',
method: 'get',
params
})
}
export function FetchInitCategoryInputFieldByPid(params) {
return request({
url: 'api/category/initCategoryInputFieldByPid',
method: 'get',
params
})
}
export function FetchMenuByFondsId(params) {
return request({
url: 'api/category/menuByFondsId',
method: 'get',
params
})
}
export default { add, edit, del, FetchCategoryMenu, FetchInitCategoryField, FetchCategoryFieldManage, FetchUpardicSort, FetchInitCategoryFieldByPid, FetchInitCategoryInputFieldByPid, FetchMenuByFondsId }

145
src/views/inquiryMachine/column.vue

@ -4,14 +4,16 @@
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div class="head-search" style="align-items: center;"> <div class="head-search" style="align-items: center;">
<!-- 搜索 -->
<el-input v-model="query.blurry" size="small" clearable placeholder="输入栏目名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<el-select v-model="query.type" clearable size="small" placeholder="栏目类型" class="filter-item" style="width: 160px;" @change="crud.toQuery">
<el-option v-for="item in typeOptions" :key="item.key" :label="item.display_name" :value="item.key" />
</el-select>
<el-input v-model="query.title" size="small" clearable placeholder="输入栏目名称搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<el-select v-model="query.status" clearable size="small" placeholder="状态" class="filter-item" style="width: 100px" @change="crud.toQuery"> <el-select v-model="query.status" clearable size="small" placeholder="状态" class="filter-item" style="width: 100px" @change="crud.toQuery">
<i slot="prefix" class="iconfont icon-zhuangtai" /> <i slot="prefix" class="iconfont icon-zhuangtai" />
<el-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" /> <el-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key" />
</el-select> </el-select>
<rrOperation /> <rrOperation />
<el-checkbox v-model="fiterColumnZero" label="仅显示内容数量为 0 的栏目" name="fiterColumnZero" @change="handleFiterColumnZero($event)" />
<el-checkbox v-model="query.isContent" label="仅显示内容数量为 0 的栏目" name="fiterColumnZero" @change="crud.toQuery" />
</div> </div>
<crudOperation :permission="permission"> <crudOperation :permission="permission">
<template v-slot:middle> <template v-slot:middle>
@ -37,44 +39,40 @@
<div class="setting-dialog"> <div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="110px"> <el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="110px">
<el-row> <el-row>
<el-form-item label="栏目名称" prop="columnName">
<el-input v-model="form.columnName" style="width: 586px;" />
<el-form-item label="栏目名称" prop="title">
<el-input v-model="form.title" style="width: 586px;" />
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-form-item label="栏目编码" prop="columnNo">
<el-input v-model="form.columnNo" />
<el-form-item label="栏目编码" prop="code">
<el-input v-model="form.code" />
</el-form-item> </el-form-item>
<el-form-item label="栏目类型" prop="columnType">
<el-radio-group v-model="form.columnType">
<el-radio :label="1">单页展示</el-radio>
<el-radio :label="0">列表展示</el-radio>
</el-radio-group>
<el-form-item label="栏目类型" prop="type">
<el-select v-model="form.type" placeholder="请选择">
<el-option
v-for="(item,index) in columnTypeOptions"
:key="index"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="排序" prop="columnOrders">
<el-form-item label="排序" prop="seqencing">
<el-input-number <el-input-number
v-model.number="form.columnOrders"
v-model.number="form.seqencing"
:min="0" :min="0"
:max="999" :max="999"
controls-position="right" controls-position="right"
/> />
</el-form-item> </el-form-item>
<el-form-item label="内容类型" prop="columnContentType">
<el-radio-group v-model="form.columnContentType">
<el-radio :label="1">图文</el-radio>
<el-radio :label="0">链接</el-radio>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-row> <el-row>
<el-form-item label="状态" prop="columnStatus" style="margin-left: 350px;">
<el-radio-group v-model="form.columnStatus">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="备注" prop="columnRemarks">
<el-input v-model="form.columnRemarks" style="width: 586px;" rows="3" type="textarea" />
<el-form-item label="备注" prop="remarks">
<el-input v-model="form.remarks" style="width: 586px;" rows="3" type="textarea" />
</el-form-item> </el-form-item>
</el-row> </el-row>
</el-form> </el-form>
@ -86,15 +84,21 @@
</el-dialog> </el-dialog>
<el-table ref="table" v-loading="crud.loading" highlight-current-row style="width: 100%;" height="calc(100vh - 330px)" :data="crud.data" @selection-change="crud.selectionChangeHandler"> <el-table ref="table" v-loading="crud.loading" highlight-current-row style="width: 100%;" height="calc(100vh - 330px)" :data="crud.data" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" align="center" width="55" /> <el-table-column type="selection" align="center" width="55" />
<el-table-column prop="columnName" label="栏目名称" />
<el-table-column prop="title" label="栏目名称" />
<el-table-column prop="code" label="栏目编码" /> <el-table-column prop="code" label="栏目编码" />
<el-table-column prop="type" label="栏目类型" />
<el-table-column prop="cotentType" label="内容类型" />
<el-table-column prop="type" label="栏目类型">
<template slot-scope="scope">
<div v-if="scope.row.type === 1">图文详情</div>
<div v-if="scope.row.type === 2">文字列表-图文详情</div>
<div v-if="scope.row.type === 3">图文列表-图文详情</div>
<div v-if="scope.row.type === 4">图文列表-外部跳转</div>
</template>
</el-table-column>
<el-table-column prop="deptsCount" label="内容数量" /> <el-table-column prop="deptsCount" label="内容数量" />
<el-table-column prop="columnOrders" label="排序" align="center" />
<el-table-column label="状态" align="center" prop="columnStatus">
<el-table-column prop="seqencing" label="排序" align="center" />
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch v-model="scope.row.columnStatus" active-color="#409EFF" inactive-color="#F56C6C" :active-value="1" :inactive-value="0" @change="changeStatus(scope.row, scope.row.columnStatus)" />
<el-switch v-model="scope.row.status" active-color="#409EFF" inactive-color="#F56C6C" :active-value="1" :inactive-value="0" @change="changeStatus(scope.row, scope.row.status)" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="create" label="创建者" /> <el-table-column prop="create" label="创建者" />
@ -105,7 +109,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination />
<pagination v-if="crud.data.length !== 0" />
</div> </div>
</div> </div>
</template> </template>
@ -120,12 +124,12 @@ import pagination from '@crud/Pagination'
// import qs from 'qs' // import qs from 'qs'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
const defaultForm = { id: null, columnName: null, columnNo: null, columnType: 1, columnOrders: 999, columnContentType: 1, columnStatus: 1, columnRemarks: null }
const defaultForm = { id: null, title: null, code: null, type: 1, seqencing: 999, status: 1, remarks: null }
export default { export default {
name: 'Column', name: 'Column',
components: { pagination, crudOperation, rrOperation }, components: { pagination, crudOperation, rrOperation },
cruds() { cruds() {
return CRUD({ title: '栏目', url: 'api/fonds/initFondsList', crudMethod: { ...crudColumn }, optShow: {
return CRUD({ title: '栏目', url: 'api/queryMachine/initQueryTopic', crudMethod: { ...crudColumn }, optShow: {
add: true, add: true,
edit: true, edit: true,
del: false, del: false,
@ -134,7 +138,9 @@ export default {
group: false group: false
}}) }})
}, },
mixins: [presenter(), header(), form(defaultForm), crud()],
mixins: [presenter(), header(), form(function() {
return Object.assign({ libcode: this.user.fonds.fondsNo }, defaultForm)
}), crud()],
data() { data() {
return { return {
permission: { permission: {
@ -142,28 +148,36 @@ export default {
edit: ['admin', 'column:edit'], edit: ['admin', 'column:edit'],
del: ['admin', 'column:del'] del: ['admin', 'column:del']
}, },
typeOptions: [
{ key: '1', display_name: '图文详情' },
{ key: '2', display_name: '文字列表-图文详情' },
{ key: '3', display_name: '图文列表-图文详情' },
{ key: '4', display_name: '图文列表-外部跳转' }
],
enabledTypeOptions: [ enabledTypeOptions: [
{ key: '1', display_name: '启用' }, { key: '1', display_name: '启用' },
{ key: '0', display_name: '停用' } { key: '0', display_name: '停用' }
], ],
fiterColumnZero: false,
columnTypeOptions: [
{ value: 1, label: '图文详情' },
{ value: 2, label: '文字列表-图文详情' },
{ value: 3, label: '图文列表-图文详情' },
{ value: 4, label: '图文列表-外部跳转' }
],
rules: { rules: {
columnName: [
title: [
{ required: true, message: '请输入机构名称', trigger: 'blur' } { required: true, message: '请输入机构名称', trigger: 'blur' }
], ],
columnNo: [
code: [
{ required: true, message: '请输入栏目编码', trigger: 'blur' } { required: true, message: '请输入栏目编码', trigger: 'blur' }
], ],
columnType: [
type: [
{ required: true, message: '请选择栏目类型', trigger: 'change' } { required: true, message: '请选择栏目类型', trigger: 'change' }
], ],
columnContentType: [
{ required: true, message: '请选择内容类型', trigger: 'change' }
],
columnOrders: [
seqencing: [
{ required: true, message: '请输入排序', trigger: 'blur', type: 'number' } { required: true, message: '请输入排序', trigger: 'blur', type: 'number' }
], ],
columnStatus: [
status: [
{ required: true, message: '请选择状态', trigger: 'change' } { required: true, message: '请选择状态', trigger: 'change' }
] ]
} }
@ -181,6 +195,7 @@ export default {
}, },
methods: { methods: {
[CRUD.HOOK.beforeRefresh]() { [CRUD.HOOK.beforeRefresh]() {
this.crud.query.libcode = this.user.fonds.fondsNo
}, },
[CRUD.HOOK.afterRefresh]() { [CRUD.HOOK.afterRefresh]() {
}, },
@ -208,34 +223,38 @@ export default {
this.crud.delAllLoading = true this.crud.delAllLoading = true
const ids = [] const ids = []
datas.forEach(val => { datas.forEach(val => {
ids.push(val.fondsId)
ids.push(val.id)
})
crudColumn.del(ids).then((res) => {
if (res.code !== 500) {
this.$message({ message: '删除成功', type: 'success', offset: 8 })
this.crud.refresh()
} else {
this.$message({ message: '删除失败', type: 'error', offset: 8 })
}
this.crud.delAllLoading = false
}).catch(err => {
this.crud.delAllLoading = false
console.log(err)
}) })
// crudColumn.del(ids).then(() => {
// this.$message({ message: '', type: 'success', offset: 8 })
// this.crud.delAllLoading = false
// this.crud.refresh()
// }).catch(err => {
// this.crud.delAllLoading = false
// console.log(err)
// })
}).catch(() => { }).catch(() => {
}) })
}, },
changeStatus(data, val) { changeStatus(data, val) {
this.$confirm('此操作将禁用 / 启用栏目 “' + data.fondsName + '”' + '<span>你是否还要继续?</span>', '提示', {
this.$confirm('此操作将禁用 / 启用栏目 “' + data.title + '”' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续', confirmButtonText: '继续',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
dangerouslyUseHTMLString: true dangerouslyUseHTMLString: true
}).then(() => { }).then(() => {
// crudColumn.FetchUpdateFondsStatus(data).then(res => {
// this.$message({ message: '', type: 'success', offset: 8 })
// }).catch(() => {
// data.fondsStatus = !data.fondsStatus
// })
crudColumn.FetchQueryTopicStatus(data).then(res => {
this.$message({ message: '修改成功', type: 'success', offset: 8 })
}).catch(() => {
data.status = !data.status
})
}).catch(() => { }).catch(() => {
this.$message({ message: '已取消修改', offset: 8 }) this.$message({ message: '已取消修改', offset: 8 })
// data.fondsStatus = data.fondsStatus ? 0 : 1
data.status = data.status ? 0 : 1
}) })
}, },
doExport(data) { doExport(data) {

292
src/views/inquiryMachine/content.vue

@ -5,30 +5,32 @@
<div class="head-container"> <div class="head-container">
<el-input v-model="filterText" clearable size="small" placeholder="输入栏目名称搜索" prefix-icon="el-icon-search" class="filter-item" /> <el-input v-model="filterText" clearable size="small" placeholder="输入栏目名称搜索" prefix-icon="el-icon-search" class="filter-item" />
</div> </div>
<el-tree ref="tree" v-loading="crud.loading" :data="fondsDatas" :props="defaultProps" :expand-on-click-node="false" :default-expanded-keys="defaultExpandedKeys" node-key="id" highlight-current :filter-node-method="filterNode" @node-click="handleNodeClick">
<template
slot-scope="{node}"
class="custom-tree-node"
>
<span
v-if="node.label.length <= 10"
class="tree-text"
> {{ node.label }}</span>
<el-tooltip
v-else
effect="dark"
:content="node.label"
:enterable="false"
placement="left"
>
<span class="tree-text"> {{ node.label }}</span>
</el-tooltip>
</template>
</el-tree>
<div class="tree-scroll">
<el-scrollbar style="height: calc(100vh - 230px);">
<el-tree ref="tree" v-loading="crud.loading" :data="columnTreeDatas" :props="defaultProps" :expand-on-click-node="false" :default-expanded-keys="defaultExpandedKeys" node-key="id" highlight-current :filter-node-method="filterNode" @node-click="handleNodeClick">
<template slot-scope="{ node, data }" class="custom-tree-node">
<div v-if="node.label.length <= 10" class="tree-text">
<p> {{ node.label }}</p>
<div v-if="data.id !== 0">
<span v-if="data.type !== 1">0 /</span>
<span v-else>0 /1</span>
</div>
</div>
<el-tooltip v-else effect="dark" :content="node.label" :enterable="false" placement="left">
<span class="tree-text">
<p> {{ node.label }}</p>
<div v-if="data.id !== 0">
<span v-if="data.type !== 1">0 /</span>
<span v-else>0 /1</span>
</div>
</span>
</el-tooltip>
</template>
</el-tree>
</el-scrollbar>
</div>
</div> </div>
<!--用户数据-->
<div class="elect-cont-right"> <div class="elect-cont-right">
<!--工具栏-->
<div class="head-container"> <div class="head-container">
<div class="head-search"> <div class="head-search">
<el-input v-model="query.blurry" clearable size="small" placeholder="输入内容标题搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" /> <el-input v-model="query.blurry" clearable size="small" placeholder="输入内容标题搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
@ -36,6 +38,9 @@
<el-button v-if="crud.optShow.reset" class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button> <el-button v-if="crud.optShow.reset" class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button>
</div> </div>
<crudOperation :permission="permission"> <crudOperation :permission="permission">
<template v-slot:left>
<el-button v-permission="permission.add" size="mini" type="primary" :disabled="!activeAddBtn" @click="crud.toAdd"><i class="iconfont icon-xinzeng" />新增</el-button>
</template>
<template v-slot:middle> <template v-slot:middle>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)"> <el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" /> <i class="iconfont icon-shanchu" />
@ -44,29 +49,29 @@
</template> </template>
</crudOperation> </crudOperation>
</div> </div>
<el-dialog class="inquiry-dialog" append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title">
<el-dialog :class="currentKeyColumn.type === 4 ? 'inquiry-other-dialog' : 'inquiry-dialog'" append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title">
<div class="setting-dialog"> <div class="setting-dialog">
<div class="content-parent-info"> <div class="content-parent-info">
<div>所属栏目<span>图书馆简介</span></div>
<div>栏目类型<span>单页展示</span></div>
<div>栏目类型<span>图文</span></div>
<div>所属栏目<span>{{ currentKeyColumn && currentKeyColumn.title }}</span></div>
<div>栏目类型<span>{{ columnTypeText }}</span></div>
</div> </div>
<el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="90px"> <el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="90px">
<el-row> <el-row>
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
<el-input v-model="form.title" style="width: 1000px;" />
<el-input v-model="form.title" :style="containerStyle" />
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-form-item label="来源" prop="original">
<el-form-item v-if="currentKeyColumn.type !== 4" label="来源" prop="original">
<el-input v-model="form.original" /> <el-input v-model="form.original" />
</el-form-item> </el-form-item>
<el-form-item label="作者" prop="author">
<el-form-item v-if="currentKeyColumn.type !== 4" label="作者" prop="author">
<el-input v-model="form.author" /> <el-input v-model="form.author" />
</el-form-item> </el-form-item>
<el-form-item label="责编" prop="editor">
<el-form-item v-if="currentKeyColumn.type !== 4" label="责编" prop="editor">
<el-input v-model="form.editor" /> <el-input v-model="form.editor" />
</el-form-item> </el-form-item>
<mavon-editor <mavon-editor
v-if="currentKeyColumn.type !== 4"
:value="form.content" :value="form.content"
:subfield="true" :subfield="true"
:default-open="'edit,preview'" :default-open="'edit,preview'"
@ -74,6 +79,10 @@
:ishljs="true" :ishljs="true"
@change="handleEditorChange" @change="handleEditorChange"
/> />
<el-form-item v-if="currentKeyColumn.type === 4" label="链接" prop="link">
<el-input v-model="form.link" :style="containerStyle" />
</el-form-item>
<UploadCover v-if="currentKeyColumn.type === 4" ref="uploadCoverRefs" :label-name="labelName" :form="form" upload-type="book" @childCover="handleCover" />
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button> <el-button type="text" @click="crud.cancelCU">取消</el-button>
@ -89,8 +98,7 @@
ref="table" ref="table"
v-loading="crud.loading" v-loading="crud.loading"
height="calc(100vh - 330px)" height="calc(100vh - 330px)"
:data="tableData"
:row-key="getRowKey"
:data="crud.data"
@selection-change="crud.selectionChangeHandler" @selection-change="crud.selectionChangeHandler"
@row-click="clickRowHandler" @row-click="clickRowHandler"
> >
@ -98,7 +106,7 @@
<el-table-column label="标题" prop="deptsName" /> <el-table-column label="标题" prop="deptsName" />
<el-table-column label="所属栏目" prop="deptsCode" /> <el-table-column label="所属栏目" prop="deptsCode" />
<el-table-column label="栏目类型" prop="deptsTotalPeoNum" /> <el-table-column label="栏目类型" prop="deptsTotalPeoNum" />
<el-table-column label="内容类型" prop="fondsName" />
<el-table-column label="内容类型" prop="type" />
<el-table-column label="创建者" prop="create" /> <el-table-column label="创建者" prop="create" />
<el-table-column prop="createTime" label="创建日期"> <el-table-column prop="createTime" label="创建日期">
<template slot-scope="scope"> <template slot-scope="scope">
@ -115,21 +123,21 @@
</template> </template>
<script> <script>
import crudContent from '@/api/inquiryMachine/content'
import { FetchFondsAll } from '@/api/system/fonds'
import crudContent, { FetchQueryTopicTree } from '@/api/inquiryMachine/content'
import CRUD, { presenter, header, form, crud } from '@crud/crud' import CRUD, { presenter, header, form, crud } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation' import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination' import pagination from '@crud/Pagination'
import Vue from 'vue' import Vue from 'vue'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import UploadCover from '@/views/components/upload.vue'
const defaultForm = { id: null, title: null, original: '', author: '', editor: '', content: '' }
const defaultForm = { id: null, title: null, original: '', author: '', editor: '', content: '', link: '', linkImg: '' }
export default { export default {
name: 'Content', name: 'Content',
components: { crudOperation, pagination },
components: { crudOperation, pagination, UploadCover },
cruds() { cruds() {
return CRUD({ title: '内容', url: 'api/depts/initDeptsList', crudMethod: { ...crudContent }, optShow: {
add: true,
return CRUD({ title: '内容', url: '', crudMethod: { ...crudContent }, optShow: {
add: false,
edit: true, edit: true,
del: false, del: false,
reset: true, reset: true,
@ -140,39 +148,49 @@ export default {
}) })
}, },
mixins: [presenter(), header(), form(defaultForm), crud()], mixins: [presenter(), header(), form(defaultForm), crud()],
dicts: ['dept_status'],
data() { data() {
return { return {
depts: [],
tableData: [],
labelName: '内容图片',
currentKeyColumn: {},
rules: { rules: {
title: [ title: [
{ required: true, message: '标题不可为空', trigger: 'blur' } { required: true, message: '标题不可为空', trigger: 'blur' }
] ]
}, },
fondsName: '',
fondsDatas: [],
columnTreeDatas: [],
filterText: '', filterText: '',
defaultExpandedKeys: [], defaultExpandedKeys: [],
fondsOptions: [],
defaultProps: { children: 'children', label: 'fondsName' },
defaultProps: { children: 'children', label: 'title' },
permission: { permission: {
add: ['admin', 'dept:add'],
edit: ['admin', 'dept:edit'],
del: ['admin', 'dept:del']
},
enabledTypeOptions: [
{ key: '1', display_name: '激活' },
{ key: '0', display_name: '锁定' }
],
levelNumber: 0
add: ['admin', 'content:add'],
edit: ['admin', 'content:edit'],
del: ['admin', 'content:del']
}
} }
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
'baseApi', 'baseApi',
'user' 'user'
])
]),
activeAddBtn() {
return this.currentKeyColumn.id !== 0
},
containerStyle() {
return {
width: this.currentKeyColumn.type !== 4 ? '1000px' : '585px'
}
},
columnTypeText() {
const typeMap = {
1: '图文详情',
2: '文字列表-图文详情',
3: '图文列表-图文详情',
4: '图文列表-外部跳转'
}
return typeMap[this.currentKeyColumn.type] || ''
}
}, },
watch: { watch: {
filterText(val) { filterText(val) {
@ -180,66 +198,36 @@ export default {
} }
}, },
mounted() { mounted() {
this.getFondsDatas()
this.getQueryTopicTree()
}, },
methods: { methods: {
// vue-treeSelectunknown
getAutoNameUnknown(name) {
if (name.lastIndexOf('unknown') > -1) {
return name.split('(')[0]
handleCover(value) {
console.log(value)
if (value) {
this.form.imgPath = value
this.bookCover = this.baseApi + '/api/fileRelevant/getImg?imgType=2&imgId=' + value
} else { } else {
return name
this.form.imgPath = null
this.bookCover = null
} }
}, },
getRowKey(row) { getRowKey(row) {
return row.deptsId
return row.id
}, },
resetQuery() { resetQuery() {
this.crud.query.blurry = '' this.crud.query.blurry = ''
this.blurryTime = null
this.crud.query.startTime = null
this.crud.query.endTime = null
this.crud.query.status = null
this.crud.toQuery() this.crud.toQuery()
}, },
[CRUD.HOOK.beforeRefresh]() { [CRUD.HOOK.beforeRefresh]() {
this.tableData = [] this.tableData = []
}, },
[CRUD.HOOK.afterRefresh](crud) { [CRUD.HOOK.afterRefresh](crud) {
crud.data.forEach(function(item, index) {
if (item.sonNum !== 0) {
item.hasChildren = true
} else {
item.hasChildren = false
}
if (!item.hasChildren) {
item.children = null
}
})
this.tableData = this.crud.data
}, },
// //
[CRUD.HOOK.afterToCU](crud, form) { [CRUD.HOOK.afterToCU](crud, form) {
this.depts = []
this.levelNumber = 0
if (form.id != null) {
if (form.deptsParentsId === null) {
form.isTop = '1'
} else {
form.isTop = '0'
const params = {
'fondsId': form.fondsId,
'fondsName': form.fondsName,
'status': 1
}
this.getDepts(params)
this.levelNumber = 4
}
}
}, },
// //
[CRUD.HOOK.beforeToEdit](crud, form) { [CRUD.HOOK.beforeToEdit](crud, form) {
crud.form.id = form.deptsId
}, },
// //
[CRUD.HOOK.afterValidateCU](crud) { [CRUD.HOOK.afterValidateCU](crud) {
@ -249,97 +237,58 @@ export default {
handleEditorChange(value) { handleEditorChange(value) {
this.form.content = value this.form.content = value
}, },
getFondsDatas() {
getQueryTopicTree() {
const parent = {} const parent = {}
parent.id = 0 parent.id = 0
parent.fondsName = '栏目'
FetchFondsAll().then(res => {
parent.title = '栏目'
FetchQueryTopicTree().then(res => {
parent.children = res parent.children = res
this.fondsDatas.push(parent)
this.fondsOptions = res
this.columnTreeDatas.push(parent)
this.$nextTick(() => { this.$nextTick(() => {
Vue.set(this.defaultExpandedKeys, 0, this.fondsDatas[0].children[0].id)
this.$refs.tree.setCurrentKey(this.fondsDatas[0].children[0].id)
this.handleNodeClick(this.fondsDatas[0].children[0])
Vue.set(this.defaultExpandedKeys, 0, this.columnTreeDatas[0].children[0].id)
this.$refs.tree.setCurrentKey(this.columnTreeDatas[0].children[0].id)
this.handleNodeClick(this.columnTreeDatas[0].children[0])
}) })
}) })
}, },
filterNode(value, data) { filterNode(value, data) {
if (!value) return true if (!value) return true
return data.fondsName.indexOf(value) !== -1
return data.title.indexOf(value) !== -1
}, },
handleNodeClick(val) { handleNodeClick(val) {
if (val) {
if (val.id !== 0) {
this.query.fondsName = val.fondsName
this.query.fondsNo = val.fondsNo
this.crud.toQuery()
const params = {
'fondsId': val.id,
'fondsName': val.fondsName,
'status': 1
}
this.getDepts(params)
}
this.currentKeyColumn = val
if (val && val.id !== 0) {
this.crud.toQuery()
} }
}, },
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
getDepts(params) {
// crudDept.getDepts(params).then(res => {
// this.depts = res.content.map(function(obj) {
// if (obj.sonNum !== 0) {
// obj.hasChildren = true
// } else {
// obj.hasChildren = false
// }
// if (obj.hasChildren) {
// obj.children = null
// }
// return obj
// })
// })
},
toDelete(datas) { toDelete(datas) {
const bool = datas.every(item => item.deptsTotalPeoNum !== 0)
if (!bool) {
this.$confirm('此操作将删除当前所选' + this.crud.title + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
const ids = []
datas.forEach(val => {
ids.push(val.deptsId)
})
// crudContent.del(ids).then(() => {
// this.$message({ message: '', type: 'success', offset: 8 })
// this.crud.delAllLoading = false
// this.crud.refresh()
// }).catch(err => {
// this.crud.delAllLoading = false
// console.log(err)
// })
}).catch(() => {
this.$confirm('此操作将删除当前所选' + this.crud.title + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
const ids = []
datas.forEach(val => {
ids.push(val.deptsId)
}) })
} else {
this.$message({ message: '当前选择条目中有用户存在不可直接操作删除', type: 'error', offset: 8 })
}
// crudContent.del(ids).then(() => {
// this.$message({ message: '', type: 'success', offset: 8 })
// this.crud.delAllLoading = false
// this.crud.refresh()
// }).catch(err => {
// this.crud.delAllLoading = false
// console.log(err)
// })
}).catch(() => {
})
}, },
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children
}
return {
id: node.deptsId,
label: node.deptsName,
children: node.children
}
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
} }
} }
} }
</script> </script>
@ -353,6 +302,7 @@ export default {
.tree-text{ .tree-text{
font-size: 16px; font-size: 16px;
font-weight: 600; font-weight: 600;
} }
} }
.el-tree-node__children{ .el-tree-node__children{
@ -364,6 +314,9 @@ export default {
white-space: nowrap; white-space: nowrap;
display: inline-block; display: inline-block;
min-width: 170px; min-width: 170px;
display: flex;
justify-content: space-between;
align-items: center;
} }
} }
} }
@ -394,4 +347,5 @@ export default {
} }
} }
} }
</style> </style>

156
src/views/inquiryMachine/form.vue

@ -0,0 +1,156 @@
<template>
<!--表单组件-->
<el-dialog append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title">
<div class="setting-dialog">
<el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="90px">
<el-form-item v-if="selectedMenu.pid === '0'" label="所属父级" prop="parentName">
<el-input v-model="selectedMenu.cnName" disabled />
</el-form-item>
<el-form-item v-else label="所属父级" prop="parentName">
<el-input v-model="selectedMenu.parentName" disabled />
</el-form-item>
<el-form-item label="编码" prop="code">
<el-input v-model="form.code" />
</el-form-item>
<el-form-item label="名称" prop="cnName">
<el-input v-model="form.cnName" />
</el-form-item>
<el-form-item label="菜单类型" prop="isType">
<el-select v-model="form.isType" style="width: 225px;" @change="changeType">
<el-option v-for="item in selectOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-row>
<el-form-item style="width: 100%;" label="栏目绑定" prop="bind" class="is-required selecct-dropdown">
<el-select v-model="form.bind" style="width: 584px" multiple placeholder="请选择" :popper-append-to-body="false" @remove-tag="deleteTag" @change="changeColumn">
<el-option v-for="item in columnDatas" :key="item.id" :label="item.title" :value="item.id" />
</el-select>
</el-form-item>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" :rows="4" style="width: 580px;" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</div>
</el-dialog>
</template>
<script>
import { FetchInitQueryTopic } from '@/api/inquiryMachine/column'
import { form } from '@crud/crud'
import CRUD from '@crud/crud'
const defaultForm = { id: null, parentName: null, cnName: null, code: null, bind: null, isType: null, remark: null }
export default {
mixins: [
form(function() {
return Object.assign({ pid: this.pid }, defaultForm)
})
],
props: {
selectedMenu: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
pid: null,
isAdd: false,
rules: {
parentLevel: [
{ required: true, message: '所属父级不可为空', trigger: 'blur' }
],
cnName: [
{ required: true, message: '名称不可为空', trigger: 'blur' }
],
isType: [
{ required: true, message: '菜单类型不可为空', trigger: 'change' }
],
code: [
{ required: true, message: '编码不可为空', trigger: 'blur' }
],
bind: [
{ required: true, message: '栏目绑定不可为空', trigger: 'change' }
]
},
selectOptions: [
{ value: 1, label: '菜单' },
{ value: 2, label: '栏目显示' },
{ value: 3, label: '栏目列表' },
{ value: 4, label: '新书推荐' }
],
columnDatas: [],
templateTree: [],
selectedTemplateNode: {},
bindColumn: []
}
},
watch: {
selectedMenu: function(newValue, oldValue) {
// console.log('newValue', newValue)
}
},
created() {
this.getInitQueryTopic()
},
methods: {
getInitQueryTopic() {
FetchInitQueryTopic().then(res => {
this.columnDatas = res.content
})
},
changeColumn(value) {
this.bindColumn = []
value.forEach(function(data, index) {
const role = { id: data }
this.bindColumn.push(role)
})
},
deleteTag(value) {
this.bindColumn.forEach(function(data, index) {
if (data.id === value) {
this.bindColumn.splice(index, value)
}
})
},
beforeToAdd() {
this.form.isType = null
},
[CRUD.HOOK.beforeSubmit]() {
},
//
[CRUD.HOOK.afterValidateCU](crud) {
// delete crud.form.parentName
console.log(crud.form)
return false
},
updateTemplateValue(node, instanceId) {
this.selectedTemplateNode = node
},
changeType() {
this.isAdd = this.form.isType === 2
},
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children
}
return {
id: node.id,
label: node.cnName,
children: node.children,
isDisabled: node.isType !== 2 && node.isType !== 3 && node.isType !== 5
}
}
}
}
</script>
<style lang="scss" scoped>
</style>

465
src/views/inquiryMachine/menu.vue

@ -0,0 +1,465 @@
<template>
<div class="app-container category-container" style="height: calc(100vh - 140px);">
<!-- 门类列表 -->
<div class="container-main">
<div class="elect-cont-left">
<div class="head-container">
<crudOperation :permission="permission">
<template v-slot:left>
<!-- :disabled="crud.selections.length === 0 || crud.selections[0].isType !== 1 || crud.selections[0].isType === 3" -->
<el-button size="mini" @click="crud.toAdd">
<i class="iconfont icon-xinzeng" />
新增
</el-button>
<!-- :disabled="crud.selections.length !== 1 || crud.selections[0].pid === '0' || crud.selections[0].isType === 3" -->
<el-button size="mini" @click="crud.toEdit(crud.selections[0])">
<i class="iconfont icon-bianji" />
编辑
</el-button>
</template>
<template v-slot:right>
<!-- :disabled="crud.selections.length === 0 || (crud.selections.length === 1 && crud.selections[0].pid === '0' ) || crud.selections[0].isType === 3" -->
<el-button size="mini" :loading="crud.delAllLoading" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
<el-button icon="el-icon-sort" size="mini" :loading="sortLoading" :disabled="brotherNodeNum <= 1 || crud.selections[0].pid === '0' " @click="toSort(crud.selections)">排序</el-button>
</template>
</crudOperation>
</div>
<div class="container-left">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!--门类树状结构-->
<div class="tree-scroll">
<el-scrollbar style="height: calc(100vh - 230px);">
<el-tree ref="tree" v-loading="crud.loading" :data="crud.data" :props="defaultProps" node-key="id" :expand-on-click-node="false" highlight-current @node-click="handleNodeClick">
<span slot-scope="{ node, data }" class="custom-tree-node">
<span v-if="data.isType === 1 " class="iconFolder">
{{ data.cnName }}
</span>
<span v-if="data.isType === 2" class="iconArch">
{{ data.cnName }}
</span>
<span v-if="data.isType === 3" class="iconFile">
{{ data.cnName }}
</span>
</span>
</el-tree>
</el-scrollbar>
</div>
</div>
</div>
<!-- 门类管理tab -->
<div class="elect-cont-right">
<div class="container-right tab-content">
<span class="right-top-line" />
<span class="left-bottom-line" />
<el-form ref="menuForm" class="menuForm" :model="menuForm" size="small">
<el-form-item label="" prop="preview_url">
<el-tooltip v-if="!editStatus.menuForm.preview_url" class="item" effect="dark" content="双击编辑查询机页面展示地址" placement="top">
<span class="edit-readonly" :style="{ color: menuForm.preview_url ? '#606266' : '#c0c4cc' }" @dblclick="handleDblClick('menuForm', 'preview_url')"> {{ menuForm.preview_url || '双击编辑查询机页面展示地址' }} </span>
</el-tooltip>
<el-input v-else ref="menuFormpreview_url" v-model="menuForm.preview_url" @blur="handleBlur('menuForm', 'preview_url')" @keyup.enter="handleBlur('menuForm', 'preview_url')" />
</el-form-item>
</el-form>
<div class="system-base-info">
<div class="menu-title">基本信息</div>
<div class="base-info">
<div class="info-item">
<span>菜单名称</span>
<p>{{ selectedMenu.cnName }}</p>
</div>
<div class="info-item">
<span>菜单类型</span>
<p v-if="selectedMenu.isType == 1">菜单</p>
<p v-else-if="selectedMenu.isType == 2">栏目显示</p>
<p v-else-if="selectedMenu.isType == 3">栏目列表</p>
<p v-else-if="selectedMenu.isType == 4">新书推荐</p>
<p v-else />
<div style="flex: 1; display: flex; justify-content: flex-start; align-items: center; margin-left: 10px;">
<i style="cursor: pointer;" class="iconfont" :class="copied ? 'icon-fuzhichenggong1' : 'icon-fuzhi'" @click="copyLink" />
<span style="display: block; flex: 1; text-align: left;">仅1级菜单可生成链接地址</span>
</div>
</div>
<div class="info-item">
<span>所属父级</span>
<p>{{ selectedMenu.parentName ? selectedMenu.parentName : '-' }}</p>
</div>
<div class="info-item info-content">
<span>备注</span>
<p>{{ selectedMenu.remark ? selectedMenu.remark : '-' }}</p>
</div>
</div>
</div>
<div class="system-base-info">
<div class="menu-title">数据绑定</div>
<div class="base-info">
<div class="info-item column-item">
<span>栏目绑定</span>
<ul>
<li>栏目A</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!--修改新增表单组件-->
<eForm ref="eform" :selected-category="selectedMenu" />
<!--排序对话框组件-->
<sortDialog ref="sort" @treeNodeSort="treeNodeSort" />
</div>
</div>
</template>
<script>
import crudCategory from '@/api/inquiryMachine/menu'
import CRUD, { presenter, header } from '@crud/crud'
import eForm from './form'
import sortDialog from './sortDialog'
import crudOperation from '@crud/CRUD.operation'
import Vue from 'vue'
import { mapGetters } from 'vuex'
export default {
name: 'InquiryMachineMenu',
components: { crudOperation, eForm, sortDialog },
cruds() {
return [
CRUD({
title: '菜单', url: 'api/queryMachine/initQueryMenuTree',
crudMethod: { ...crudCategory },
optShow: {
add: false,
edit: false,
del: false,
download: false,
group: false
}
})
]
},
mixins: [presenter(), header()],
data() {
return {
permission: {
add: ['admin', 'menu:add'],
edit: ['admin', 'menu:edit'],
del: ['admin', 'menu:del'],
sort: ['admin', 'menu:sort']
},
defaultProps: {
children: 'children',
label: 'cnName'
},
deleteVisible: false,
reconfirmDeleteVisible: false,
selectedMenu: {},
deleteData: {},
sortLoading: false,
brotherNodeNum: 0,
sortTableData: [],
menuForm: {
preview_url: null
},
editStatus: {
menuForm: {
preview_url: false
}
},
originalValues: {
menuForm: {}
},
link: 'https://www.baidu.com/',
copied: false
}
},
computed: {
...mapGetters([
'baseApi',
'user'
])
},
created() {
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
this.crud.query.page = null
this.crud.query.size = null
this.crud.query.libcode = this.user.fonds.fondsNo
},
//
findNode(tree, func) {
for (const node of tree) {
if (func(node)) return node
if (node.children) {
const res = this.findNode(node.children, func)
if (res) return res
}
}
return null
},
//
expandParents(node) {
node.expanded = true
if (node.parent) {
this.expandParents(node.parent)
}
},
[CRUD.HOOK.afterRefresh]() {
let currentKey
if (localStorage.getItem('currentCategoryKey')) {
currentKey = JSON.parse(localStorage.getItem('currentCategoryKey'))
} else {
if (this.crud.data[0].isType === 1) {
currentKey = this.findNode(this.crud.data[0].children, (node) => {
return node.isType !== 1
})
} else {
currentKey = this.crud.data[0]
}
}
//
this.$refs.tree.setCurrentKey(currentKey.id)
this.$nextTick(() => {
//
const selectedKey = this.$refs.tree.getCurrentNode()
if (this.$refs.tree.getNode(selectedKey) && this.$refs.tree.getNode(selectedKey).parent) {
this.expandParents(this.$refs.tree.getNode(selectedKey).parent)
}
//
this.handleNodeClick(selectedKey)
})
},
//
handleNodeClick(val) {
if (val) {
this.crud.selectionChangeHandler([val])
this.$refs.eform.pid = val.id
this.selectedMenu = val
if (val.pid !== '0') {
Vue.set(this.selectedMenu, 'parentName', this.$refs.tree.getNode(val.pid).data.cnName)
}
this.changeActiveTab(0)
//
localStorage.setItem('currentCategoryKey', JSON.stringify(val))
if (this.$refs.tree.getNode(val.pid) && this.$refs.tree.getNode(val.pid).childNodes) {
this.brotherNodeNum = this.$refs.tree.getNode(val.pid).childNodes.length
}
if (localStorage.getItem('categoryTabIndex')) {
this.$nextTick(() => {
localStorage.removeItem('categoryTabIndex')
})
}
}
},
// - /
[CRUD.HOOK.beforeToAdd](crud, form, btn) {
// if (this.selectedMenu.isType === 1) {
// Vue.set(this.selectedMenu, 'parentName', this.selectedMenu.cnName)
// } else {
// Vue.set(this.selectedMenu, 'parentName', this.$refs.tree.getNode(this.selectedMenu.pid).data.cnName)
// }
// const isCanAddKey = JSON.parse(localStorage.getItem('currentCategoryKey'))
// if (isCanAddKey.isType === 4 || isCanAddKey.isType === 5) {
// this.$message({ message: '', type: 'error', offset: 8 })
// return false
// }
this.$refs.eform.beforeToAdd()
},
// / -
[CRUD.HOOK.afterSubmit](crud, addedCategory) {
if (addedCategory) {
//
localStorage.setItem('currentCategoryKey', JSON.stringify(addedCategory))
}
},
treeNodeSort(data) {
this.$refs.tree.updateKeyChildren(data[0].pid, JSON.parse(JSON.stringify(data)))
},
toDelete(datas) {
this.$confirm('此操作将删除当前所选菜单项及其子集<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
this.crud.delAllLoading = true
const ids = []
datas.forEach(val => {
ids.push(val.id)
})
// crudColumn.del(ids).then((res) => {
// if (res.code !== 500) {
// this.$message({ message: '', type: 'success', offset: 8 })
// this.crud.refresh()
// } else {
// this.$message({ message: '', type: 'error', offset: 8 })
// }
// this.crud.delAllLoading = false
// }).catch(err => {
// this.crud.delAllLoading = false
// console.log(err)
// })
}).catch(() => {
})
},
toSort(data) {
this.$refs.sort.sortTableData = this.$refs.tree.getNode(data[0].pid).data.children
this.$refs.sort.sortVisible = true
},
handleDblClick(formName, field) {
this.originalValues[formName][field] = this[formName][field]
this.editStatus[formName][field] = true
this.$nextTick(() => {
const input = this.$refs[`${formName}${field}`]
if (input) input.focus()
})
},
handleBlur(formName, field) {
this.editStatus[formName][field] = false
if (this[formName][field] !== this.originalValues[formName][field]) {
this.submitMapData(formName, field)
}
},
submitMapData(formName, field) {
const value = this[formName][field]
if (!value) {
this.$message.warning(`查询机页面展示地址不能为空`)
this[formName][field] = this.originalValues[formName][field]
return
}
const param = {
'code': field,
'context': value,
'remarks': null
}
console.log('param', param)
// FetchEditScreenSetting(param)
// .then((res) => {
// if (res.code !== 500) {
// this.$message.success('')
// this.$emit('update:welcomePlay', value)
// this.$emit('triggerInit')
// } else {
// this.$message.error('')
// }
// })
// .catch(() => {
// this.$message.error('')
// })
},
copyLink() {
navigator.clipboard.writeText(this.link)
.then(() => {
this.copied = true
// 2
setTimeout(() => {
this.copied = false
}, 2000)
})
.catch(err => {
console.error('无法复制内容: ', err)
this.fallbackCopyText()
})
},
fallbackCopyText() {
const textArea = document.createElement('textarea')
textArea.value = this.link
textArea.style.position = 'fixed'
document.body.appendChild(textArea)
textArea.focus()
textArea.select()
try {
const successful = document.execCommand('copy')
this.copied = successful
if (successful) {
setTimeout(() => {
this.copied = false
}, 2000)
}
} catch (err) {
console.error('复制失败: ', err)
}
document.body.removeChild(textArea)
}
}
}
</script>
<style lang="scss" scoped>
.el-form{
.el-input{
width: 600px;
margin-right: 20px;
}
.edit-readonly{
width: 600px;
}
::v-deep .el-form-item__content{
height: 40px;
overflow: hidden;
}
}
.edit-readonly {
display: inline-block;
height: 32px;
line-height: 32px;
padding: 0 15px;
border: 1px solid #dcdfe6;
border-radius: 4px;
background-color: #fff;
margin-right: 20px;
cursor: default;
color: #606266;
font-size: 13px;
&:hover {
border-color: #c0c4cc;
}
}
.tree-scroll{
font-size: 14px;
}
.system-base-info{
display: flex;
justify-content: flex-start;
.menu-title{
line-height: 36px;
font-size: 16px;
font-weight: bold;
color: #0c0e1e;
margin-right: 40px;
}
.base-info{
flex: 1;
}
.info-item {
span{
margin-right: 10px;
}
p{
background-color: #f0efef;
}
&.column-item{
ul{
width: 300px;
height: 300px;
overflow: hidden;
overflow-y: scroll;
background-color: #f0efef;
li{
padding: 0 10px;
line-height: 36px;
}
}
}
}
}
</style>

72
src/views/inquiryMachine/sortDialog.vue

@ -0,0 +1,72 @@
<template>
<!--表单组件-->
<el-dialog class="sort-dialog" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body title="排序" :visible.sync="sortVisible" @opened="opened">
<div class="setting-dialog">
<i class="drag-tip">提示使用鼠标拖动调整顺序</i>
<el-table :data="sortTableData" :tree-props="{children: 'childrens'}" class="category-sort" style="width: 100%;" :max-height="tableHeight" row-key="id">
<el-table-column type="index" label="序号" width="100" align="center" />
<el-table-column prop="cnName" label="门类名称" />
</el-table>
<div slot="footer" class="dialog-footer">
<el-button @click.native="sortVisible = false">取消</el-button>
<el-button type="primary" @click.native="handleSort">确定</el-button>
</div>
</div>
</el-dialog>
</template>
<script>
import Sortable from 'sortablejs'
import { sort } from '@/api/inquiryMachine/menu'
export default {
data() {
return {
sortVisible: false,
sortTableData: [],
tableHeight: 0
}
},
mounted() {
this.$nextTick(() => {
this.tableHeight = window.innerHeight * 0.6
})
},
methods: {
//
rowDrop(className, targetName) {
//
const tbody = document.querySelector('.' + className + ' .el-table__body-wrapper tbody')
const that = this
Sortable.create(tbody, {
//
draggable: '.el-table__row',
onEnd({ newIndex, oldIndex }) {
if (newIndex === oldIndex) return
that[targetName].splice(newIndex, 0, that[targetName].splice(oldIndex, 1)[0])
}
})
},
opened() {
this.rowDrop('category-sort', 'sortTableData')
},
handleSort() {
const data = this.sortTableData.map((value, index) => {
return { id: value.id, categorySeq: index + 1 }
})
this.sortTableData.forEach((item, index) => {
item.categorySeq = index + 1
})
sort(data).then(() => {
this.sortVisible = false
this.$message({ message: '保存成功', type: 'success', offset: 8 })
this.$emit('treeNodeSort', this.sortTableData)
})
}
}
}
</script>
<style lang="scss" scoped>
</style>
Loading…
Cancel
Save