Browse Source

查询机内容管理

master
xuhuajiao 2 weeks ago
parent
commit
0848780fc6
  1. 17
      src/api/inquiryMachine/content.js
  2. 14
      src/assets/iconfonts/light/iconfont.css
  3. 2
      src/assets/iconfonts/light/iconfont.js
  4. 14
      src/assets/iconfonts/light/iconfont.json
  5. BIN
      src/assets/iconfonts/light/iconfont.ttf
  6. BIN
      src/assets/iconfonts/light/iconfont.woff
  7. BIN
      src/assets/iconfonts/light/iconfont.woff2
  8. BIN
      src/assets/images/icon/menu-tree01.png
  9. BIN
      src/assets/images/icon/menu-tree02.png
  10. 20
      src/assets/styles/yxk-admin.scss
  11. 44
      src/views/inquiryMachine/column.vue
  12. 149
      src/views/inquiryMachine/content.vue
  13. 28
      src/views/inquiryMachine/menu.vue

17
src/api/inquiryMachine/content.js

@ -1,9 +1,9 @@
import request from '@/utils/request'
import qs from 'qs'
// import qs from 'qs'
export function add(data) {
return request({
url: 'api/fonds/editFonds',
url: 'api/queryMachine/editQueryTopicContext',
method: 'post',
data
})
@ -11,7 +11,7 @@ export function add(data) {
export function edit(data) {
return request({
url: 'api/fonds/editFonds',
url: 'api/queryMachine/editQueryTopicContext',
method: 'post',
data
})
@ -19,17 +19,10 @@ export function edit(data) {
export function del(data) {
return request({
url: 'api/fonds/delFonds',
url: 'api/queryMachine/deleteQueryTopicContext',
method: 'post',
data
})
}
export function FetchQueryTopicTree(params) {
return request({
url: 'api/queryMachine/getQueryTopicTree' + '?' + qs.stringify(params, { indices: false }),
method: 'get'
})
}
export default { add, edit, del, FetchQueryTopicTree }
export default { add, edit, del }

14
src/assets/iconfonts/light/iconfont.css

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 3966148 */
src: url('iconfont.woff2?t=1755595283030') format('woff2'),
url('iconfont.woff?t=1755595283030') format('woff'),
url('iconfont.ttf?t=1755595283030') format('truetype');
src: url('iconfont.woff2?t=1756345950057') format('woff2'),
url('iconfont.woff?t=1756345950057') format('woff'),
url('iconfont.ttf?t=1756345950057') format('truetype');
}
.iconfont {
@ -13,6 +13,14 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-caidan:before {
content: "\e69c";
}
.icon-lanmu1:before {
content: "\e69e";
}
.icon-yuzhuceqiye:before {
content: "\e69a";
}

2
src/assets/iconfonts/light/iconfont.js
File diff suppressed because it is too large
View File

14
src/assets/iconfonts/light/iconfont.json

@ -5,6 +5,20 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "4438260",
"name": "菜单",
"font_class": "caidan",
"unicode": "e69c",
"unicode_decimal": 59036
},
{
"icon_id": "29778608",
"name": "栏目",
"font_class": "lanmu1",
"unicode": "e69e",
"unicode_decimal": 59038
},
{
"icon_id": "704557",
"name": "预注册企业",

BIN
src/assets/iconfonts/light/iconfont.ttf

BIN
src/assets/iconfonts/light/iconfont.woff

BIN
src/assets/iconfonts/light/iconfont.woff2

BIN
src/assets/images/icon/menu-tree01.png

After

Width: 200  |  Height: 200  |  Size: 4.8 KiB

BIN
src/assets/images/icon/menu-tree02.png

After

Width: 200  |  Height: 200  |  Size: 4.2 KiB

20
src/assets/styles/yxk-admin.scss

@ -1346,6 +1346,26 @@ input[type ='number'] {
}
}
.iconMenu{
display: inline-block;
height: 20px;
padding-left: 22px;
background: url('~@/assets/images/icon/menu-tree01.png') no-repeat left center;
background-size: 20px 20px;
}
.iconMenuColumn{
font-family: "iconfont" !important;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
&::before{
content: "\e69e";
font-size: 16px;
@include tree_children_icon_font;
}
}
.iconStoreHouse{
font-family: "iconfont" !important;
font-style: normal;

44
src/views/inquiryMachine/column.vue

@ -22,12 +22,12 @@
删除
</el-button>
</template>
<template v-slot:right>
<!-- <template v-slot:right>
<el-button :loading="crud.downloadLoading" size="mini" :disabled="crud.selections.length === 0" @click="doExport(crud.selections)">
<i class="iconfont icon-daochu" />
导出
</el-button>
</template>
</template> -->
</crudOperation>
</div>
<div class="container-wrap">
@ -256,27 +256,27 @@ export default {
this.$message({ message: '已取消修改', offset: 8 })
data.status = data.status ? 0 : 1
})
},
doExport(data) {
crud.downloadLoading = true
this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
const ids = []
data.forEach(val => {
ids.push(val.fondsId)
})
const params = {
'fondsIds': ids
}
console.log('params', params)
// exportFile(this.baseApi + '/api/fonds/download?' + qs.stringify(params, { indices: false }))
}).catch(() => {
})
}
// doExport(data) {
// crud.downloadLoading = true
// this.$confirm('' + '<span></span>', '', {
// confirmButtonText: '',
// cancelButtonText: '',
// type: 'warning',
// dangerouslyUseHTMLString: true
// }).then(() => {
// const ids = []
// data.forEach(val => {
// ids.push(val.fondsId)
// })
// const params = {
// 'fondsIds': ids
// }
// console.log('params', params)
// // exportFile(this.baseApi + '/api/fonds/download?' + qs.stringify(params, { indices: false }))
// }).catch(() => {
// })
// }
}
}
</script>

149
src/views/inquiryMachine/content.vue

@ -33,7 +33,7 @@
<div class="elect-cont-right">
<div class="head-container">
<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.searchTitle" clearable size="small" placeholder="输入内容标题搜索" prefix-icon="el-icon-search" style="width: 200px;" class="filter-item" @clear="crud.toQuery" @keyup.enter.native="crud.toQuery" />
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</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>
@ -57,12 +57,12 @@
</div>
<el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="90px">
<el-row>
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" :style="containerStyle" />
<el-form-item label="标题" prop="overTitle">
<el-input v-model="form.overTitle" :style="containerStyle" />
</el-form-item>
</el-row>
<el-form-item v-if="currentKeyColumn.type !== 4" label="来源" prop="original">
<el-input v-model="form.original" />
<el-form-item v-if="currentKeyColumn.type !== 4" label="来源" prop="source">
<el-input v-model="form.source" />
</el-form-item>
<el-form-item v-if="currentKeyColumn.type !== 4" label="作者" prop="author">
<el-input v-model="form.author" />
@ -70,19 +70,24 @@
<el-form-item v-if="currentKeyColumn.type !== 4" label="责编" prop="editor">
<el-input v-model="form.editor" />
</el-form-item>
<!-- @imgAdd="imgAdd" -->
<!-- https://blog.csdn.net/ws6afa88/article/details/108765569?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-108765569-blog-131412288.235^v43^pc_blog_bottom_relevance_base6&spm=1001.2101.3001.4242.1&utm_relevant_index=4 -->
<mavon-editor
v-if="currentKeyColumn.type !== 4"
:value="form.content"
ref="md"
:value="form.introHtml"
:subfield="true"
:default-open="'edit,preview'"
:editable="true"
:ishljs="true"
@imgAdd="imgAdd"
@change="handleEditorChange"
/>
<el-form-item v-if="currentKeyColumn.type === 4" label="链接" prop="link">
<el-input v-model="form.link" :style="containerStyle" />
<el-form-item v-if="currentKeyColumn.type === 4" label="链接" prop="linkUrl">
<el-input v-model="form.linkUrl" :style="containerStyle" />
</el-form-item>
<UploadCover v-if="currentKeyColumn.type === 4" ref="uploadCoverRefs" :label-name="labelName" :form="form" upload-type="book" @childCover="handleCover" />
<img v-if="currentKeyColumn.type === 4 && bookCover" style="display: block; height: 200px; margin-left: 90px;" :src="bookCover || require('@/assets/images/cover-bg.png')" alt="图书封面">
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
@ -98,24 +103,27 @@
ref="table"
v-loading="crud.loading"
height="calc(100vh - 330px)"
:data="crud.data"
:data="tableData"
@selection-change="crud.selectionChangeHandler"
@row-click="clickRowHandler"
>
<el-table-column type="selection" align="center" width="55" />
<el-table-column label="标题" prop="deptsName" />
<el-table-column label="所属栏目" prop="deptsCode" />
<el-table-column label="栏目类型" prop="deptsTotalPeoNum" />
<el-table-column label="内容类型" prop="type" />
<el-table-column label="创建者" prop="create" />
<el-table-column prop="createTime" label="创建日期">
<el-table-column label="标题" prop="overTitle" />
<el-table-column label="所属栏目" prop="topicTitle" />
<el-table-column label="栏目类型" prop="topicType">
<template>
{{ columnTypeText }}
</template>
</el-table-column>
<el-table-column label="创建者" prop="create_by" />
<el-table-column prop="create_time" label="创建日期">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
<div>{{ scope.row.create_time | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
<pagination v-if="tableData && tableData.length!==0" />
</div>
</div>
</div>
@ -123,20 +131,22 @@
</template>
<script>
import crudContent, { FetchQueryTopicTree } from '@/api/inquiryMachine/content'
import crudContent from '@/api/inquiryMachine/content'
import { FetchQueryTopicTree } from '@/api/inquiryMachine/column'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
import Vue from 'vue'
import { mapGetters } from 'vuex'
import UploadCover from '@/views/components/upload.vue'
import { upload } from '@/utils/upload'
const defaultForm = { id: null, title: null, original: '', author: '', editor: '', content: '', link: '', linkImg: '' }
const defaultForm = { id: null, overTitle: null, source: '', author: '', editor: '', introHtml: '', linkUrl: '', imgUrl: '' }
export default {
name: 'Content',
components: { crudOperation, pagination, UploadCover },
cruds() {
return CRUD({ title: '内容', url: '', crudMethod: { ...crudContent }, optShow: {
return CRUD({ title: '内容', url: 'api/queryMachine/initQueryTopicContext', crudMethod: { ...crudContent }, optShow: {
add: false,
edit: true,
del: false,
@ -153,7 +163,7 @@ export default {
labelName: '内容图片',
currentKeyColumn: {},
rules: {
title: [
overTitle: [
{ required: true, message: '标题不可为空', trigger: 'blur' }
]
},
@ -165,7 +175,9 @@ export default {
add: ['admin', 'content:add'],
edit: ['admin', 'content:edit'],
del: ['admin', 'content:del']
}
},
tableData: [],
bookCover: null
}
},
computed: {
@ -173,9 +185,16 @@ export default {
'baseApi',
'user'
]),
activeAddBtn() {
return this.currentKeyColumn.id !== 0
// 1id0
const condition1 = this.currentKeyColumn.id === 0
// 2id0type1tableData1
const condition2 = this.currentKeyColumn.id !== 0 &&
this.currentKeyColumn.type === 1 &&
this.tableData.length === 1
return !(condition1 || condition2)
},
containerStyle() {
return {
@ -204,10 +223,10 @@ export default {
handleCover(value) {
console.log(value)
if (value) {
this.form.imgPath = value
this.form.imgUrl = value
this.bookCover = this.baseApi + '/api/fileRelevant/getImg?imgType=2&imgId=' + value
} else {
this.form.imgPath = null
this.form.imgUrl = null
this.bookCover = null
}
},
@ -215,27 +234,77 @@ export default {
return row.id
},
resetQuery() {
this.crud.query.blurry = ''
this.crud.query.searchTitle = null
this.crud.toQuery()
},
[CRUD.HOOK.beforeRefresh]() {
this.tableData = []
},
[CRUD.HOOK.afterRefresh](crud) {
crud.data.forEach(item => {
item.topicTitle = this.currentKeyColumn.title
item.topicType = this.currentKeyColumn.type
})
this.tableData = this.crud.data
},
//
[CRUD.HOOK.afterToCU](crud, form) {
if (this.$refs.uploadCoverRefs) {
this.$refs.uploadCoverRefs.fileNames = null
}
},
//
[CRUD.HOOK.beforeToAdd](crud, form) {
this.bookCover = null
this.form.imgUrl = null
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
this.bookCover = this.baseApi + '/api/fileRelevant/getImg?imgType=2&imgId=' + form.imgUrl
},
//
[CRUD.HOOK.afterValidateCU](crud) {
console.log(crud.form)
return false
crud.form.libcode = this.user.fonds.fondsNo
crud.form.topicId = this.currentKeyColumn.id
return true
},
imgAdd(pos, $file) {
const _this = this
var formdata = new FormData()
formdata.append('image', $file)
//
console.log('上传的文件:', $file)
upload(this.baseApi + '/api/fileRelevant/uploadOtherImg', $file)
.then(res => {
console.log('上传接口返回:', res)
if (res.data && res.data.code === 200 && res.data.data) {
const url = `${this.baseApi}/api/fileRelevant/getImg?imgType=1&imgId=${res.data.data}`
const testImg = new Image()
testImg.onload = () => {
console.log('图片URL有效,插入编辑器')
_this.$refs.md.$img2Url(pos, url)
}
testImg.onerror = () => {
console.error('图片URL无效:', url)
this.$message({ message: '图片URL无效,无法显示', type: 'error', offset: 8 })
}
testImg.src = url
} else {
this.$message({ message: res.data?.message || '上传失败,请重试', type: 'error', offset: 8 })
}
})
.catch(error => {
console.error('上传请求失败:', error)
this.$message({ message: '上传请求失败,请重试', type: 'error', offset: 8 })
})
},
handleEditorChange(value) {
this.form.content = value
this.form.introHtml = value
},
getQueryTopicTree() {
const parent = {}
@ -257,7 +326,11 @@ export default {
},
handleNodeClick(val) {
this.currentKeyColumn = val
console.log(val)
if (val && val.id !== 0) {
this.crud.query.libcode = this.user.fonds.fondsNo
this.crud.query.topicId = val.id
this.crud.query.topicType = val.type
this.crud.toQuery()
}
},
@ -271,16 +344,16 @@ export default {
this.crud.delAllLoading = true
const ids = []
datas.forEach(val => {
ids.push(val.deptsId)
ids.push(val.id)
})
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)
})
// 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(() => {
})
},

28
src/views/inquiryMachine/menu.vue

@ -7,7 +7,8 @@
<crudOperation :permission="permission">
<template v-slot:left>
<!-- :disabled="crud.selections.length === 0 || crud.selections[0].type !== 1 || crud.selections[0].type === 3" -->
<el-button :disabled="crud.selections.length === 0 || crud.selections[0].type !== 1" size="mini" @click="toAddOrEdit('add')">
<!-- :disabled="crud.selections.length === 0 || crud.selections[0].type !== 1" -->
<el-button size="mini" @click="toAddOrEdit('add')">
<i class="iconfont icon-xinzeng" />
新增
</el-button>
@ -35,15 +36,12 @@
<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 class="iconFolder">
<span v-if="data.type === 1" class="iconMenu">
{{ data.title }}
</span>
<!-- <span v-if="data.type === 2" class="iconArch">
<span v-else class="iconMenuColumn">
{{ data.title }}
</span>
<span v-if="data.type === 3" class="iconFile">
{{ data.title }}
</span> -->
</span>
</el-tree>
</el-scrollbar>
@ -151,7 +149,6 @@
</div>
</div>
</el-dialog>
</div>
</div>
</template>
@ -198,9 +195,7 @@ export default {
label: 'title'
},
selectedMenu: {},
deleteData: {},
sortLoading: false,
queryTopics: [],
brotherNodeNum: 0,
sortTableData: [],
menuForm: {
@ -244,7 +239,7 @@ export default {
],
columnDatas: [],
form: {
queryMenu: { id: null, parentId: null, parentName: null, title: null, code: null, type: null, remarks: null },
queryMenu: { id: '', parentId: '', parentName: '', title: '', code: '', type: 1, remarks: '' },
queryTopicList: []
}
}
@ -305,7 +300,7 @@ export default {
})
},
//
handleNodeClick(val) {
handleNodeClick(val, node) {
if (val) {
this.crud.selectionChangeHandler([val])
// this.$refs.eform.parentId = val.id
@ -322,6 +317,17 @@ export default {
this.brotherNodeNum = this.$refs.tree.getNode(val.parentId).childNodes.length
}
console.log('当前节点层级:', node.level)
//
if (node.level === 1) {
console.log('这是一级节点')
} else if (node.level === 2) {
console.log('这是二级节点')
} else {
console.log(`这是第${node.level}级节点`)
}
// if (val.id !== '0') {
// Vue.set(this.selectedMenu, 'parentName', this.$refs.tree.getNode(val.id).data.title)
// }

Loading…
Cancel
Save