Browse Source

数字大屏界面优化

master
xuhuajiao 4 weeks ago
parent
commit
bf06f12f9e
  1. 83
      src/api/inquiryMachine/index.js
  2. 2
      src/assets/styles/digitalScreen.scss
  3. 5
      src/main.js
  4. 84
      src/views/digitalScreen/index.vue
  5. 4
      src/views/digitalScreen/module/advSetting.vue
  6. 3
      src/views/digitalScreen/module/areaSetting.vue
  7. 13
      src/views/digitalScreen/module/bookRecommend.vue
  8. 276
      src/views/inquiryMachine/column.vue
  9. 412
      src/views/inquiryMachine/content.vue

83
src/api/inquiryMachine/index.js

@ -0,0 +1,83 @@
import request from '@/utils/request'
export function FetchInitFondsList(params) {
return request({
url: 'api/fonds/initFondsList',
method: 'get',
params
})
}
export function add(data) {
return request({
url: 'api/fonds/editFonds',
method: 'post',
data
})
}
export function edit(data) {
return request({
url: 'api/fonds/editFonds',
method: 'post',
data
})
}
export function del(data) {
return request({
url: 'api/fonds/delFonds',
method: 'post',
data
})
}
export function FetchUpdateFondsStatus(data) {
return request({
url: 'api/fonds/updateFondsStatus',
method: 'post',
data
})
}
export function FetchDownload(params) {
return request({
url: 'api/fonds/download',
method: 'get',
params
})
}
export function FetchFondsAll() {
return request({
url: 'api/fonds/getFondsAll',
method: 'get'
})
}
export function FetchFondsCategory(data) {
return request({
url: 'api/fonds/fondsCategory',
method: 'post',
data
})
}
export function FetchFondsDetail(params) {
return request({
url: 'api/fonds/getFondsDetail',
method: 'get',
params
})
}
// 根据门类和档案id获取显示全宗
export function FetchInitFondsByCategoryIdAndArchivesId(params) {
return request({
url: 'api/fonds/initFondsByCategoryIdAndArchivesId',
method: 'get',
params
})
}
export default { add, edit, del, FetchInitFondsList, FetchUpdateFondsStatus, FetchDownload, FetchFondsCategory, FetchFondsDetail, FetchInitFondsByCategoryIdAndArchivesId }

2
src/assets/styles/digitalScreen.scss

@ -229,7 +229,7 @@
display: flex;
align-items: center;
justify-content: center;
cursor: default;
cursor: pointer;
transition: all 0.2s;
z-index: 10;
.iconfont{

5
src/main.js

@ -70,6 +70,11 @@ Vue.directive('removeAriaHidden', {
import VueCropper from 'vue-cropper'
Vue.use(VueCropper)
import mavonEditor from 'mavon-editor'
import 'mavon-editor/dist/css/index.css'
Vue.use(mavonEditor)
Vue.use(uploader)
Vue.use(checkPer)
Vue.use(VueHighlightJS)

84
src/views/digitalScreen/index.vue

@ -3,9 +3,11 @@
<!-- 标题设置 -->
<div class="config-title">
<p>大屏标题</p>
<span v-if="!isEditable" class="title-readonly" @dblclick="handleTitleDblClick">
<el-tooltip v-if="!isEditable" class="item" effect="dark" content="双击输入框进行编辑" placement="top">
<span class="title-readonly" @dblclick="handleTitleDblClick">
{{ screen_title }}
</span>
</el-tooltip>
<el-input v-else ref="titleInput" v-model="screen_title" style="width: 600px;" @blur="handleTitleBlur" @keyup.enter="handleTitleBlur" />
<div class="double-click-btn">
<i class="iconfont icon-zhuyi-lan" />
@ -84,40 +86,52 @@
<!-- 原到馆统计表单 -->
<el-form ref="librarySettingForm" :model="librarySettingForm" :rules="rules" size="small" label-width="100px">
<el-form-item label="本年到馆" prop="visit_base">
<span v-if="!editStatus.librarySettingForm.visit_base" class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'visit_base')">
<el-tooltip v-if="!editStatus.librarySettingForm.visit_base" class="item" effect="dark" content="双击输入框进行编辑" placement="top">
<span class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'visit_base')">
{{ librarySettingForm.visit_base }}
</span>
</el-tooltip>
<el-input v-else ref="librarySettingFormvisit_base" v-model="librarySettingForm.visit_base" type="number" @blur="handleBlur('librarySettingForm', 'visit_base')" @keyup.enter="handleBlur('librarySettingForm', 'visit_base')" />
<el-checkbox v-model="librarySettingForm.visit_base_checked" label="直接显示" name="visit_base_checked" @change="handleCheckboxChange('visit_base', $event)" />
</el-form-item>
<el-form-item label="去年到馆" prop="last_year_visit_base">
<span v-if="!editStatus.librarySettingForm.last_year_visit_base" class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'last_year_visit_base')">
<el-tooltip v-if="!editStatus.librarySettingForm.last_year_visit_base" class="item" effect="dark" content="双击输入框进行编辑" placement="top">
<span class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'last_year_visit_base')">
{{ librarySettingForm.last_year_visit_base }}
</span>
</el-tooltip>
<el-input v-else ref="librarySettingFormlast_year_visit_base" v-model="librarySettingForm.last_year_visit_base" type="number" @blur="handleBlur('librarySettingForm', 'last_year_visit_base')" @keyup.enter="handleBlur('librarySettingForm', 'last_year_visit_base')" />
</el-form-item>
<el-form-item label="今日到馆" prop="today_visit">
<span v-if="!editStatus.librarySettingForm.today_visit" class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'today_visit')">
<el-tooltip v-if="!editStatus.librarySettingForm.today_visit" class="item" effect="dark" content="双击输入框进行编辑" placement="top">
<span class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'today_visit')">
{{ librarySettingForm.today_visit }} </span>
</el-tooltip>
<el-input v-else ref="librarySettingFormtoday_visit" v-model="librarySettingForm.today_visit" type="number" @blur="handleBlur('librarySettingForm', 'today_visit')" @keyup.enter="handleBlur('librarySettingForm', 'today_visit')" />
<el-checkbox v-model="librarySettingForm.today_visit_checked" label="直接显示" name="today_visit_checked" @change="handleCheckboxChange('today_visit', $event)" />
</el-form-item>
<el-form-item label="昨日到馆" prop="yesterday_visit">
<span v-if="!editStatus.librarySettingForm.yesterday_visit" class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'yesterday_visit')"> {{ librarySettingForm.yesterday_visit }} </span>
<el-tooltip v-if="!editStatus.librarySettingForm.yesterday_visit" class="item" effect="dark" content="双击输入框进行编辑" placement="top">
<span class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'yesterday_visit')"> {{ librarySettingForm.yesterday_visit }} </span>
</el-tooltip>
<el-input v-else ref="librarySettingFormyesterday_visit" v-model="librarySettingForm.yesterday_visit" type="number" @blur="handleBlur('librarySettingForm', 'yesterday_visit')" @keyup.enter="handleBlur('librarySettingForm', 'yesterday_visit')" />
<el-checkbox v-model="librarySettingForm.yesterday_visit_checked" label="直接显示" name="yesterday_visit_checked" @change="handleCheckboxChange('yesterday_visit', $event)" />
</el-form-item>
<el-form-item label="本月到馆" prop="this_month_visit">
<span v-if="!editStatus.librarySettingForm.this_month_visit" class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'this_month_visit')">
<el-tooltip v-if="!editStatus.librarySettingForm.this_month_visit" class="item" effect="dark" content="双击输入框进行编辑" placement="top">
<span class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'this_month_visit')">
{{ librarySettingForm.this_month_visit }}
</span>
</el-tooltip>
<el-input v-else ref="librarySettingFormthis_month_visit" v-model="librarySettingForm.this_month_visit" type="number" @blur="handleBlur('librarySettingForm', 'this_month_visit')" @keyup.enter="handleBlur('librarySettingForm', 'this_month_visit')" />
<el-checkbox v-model="librarySettingForm.this_month_visit_checked" label="直接显示" name="this_month_visit_checked" @change="handleCheckboxChange('this_month_visit', $event)" />
</el-form-item>
<el-form-item label="上月到馆" prop="last_month_visit">
<span v-if="!editStatus.librarySettingForm.last_month_visit" class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'last_month_visit')">
<el-tooltip v-if="!editStatus.librarySettingForm.last_month_visit" class="item" effect="dark" content="双击输入框进行编辑" placement="top">
<span class="edit-readonly" @dblclick="handleDblClick('librarySettingForm', 'last_month_visit')">
{{ librarySettingForm.last_month_visit }}
</span>
</el-tooltip>
<el-input v-else ref="librarySettingFormlast_month_visit" v-model="librarySettingForm.last_month_visit" type="number" @blur="handleBlur('librarySettingForm', 'last_month_visit')" @keyup.enter="handleBlur('librarySettingForm', 'last_month_visit')" />
<el-checkbox v-model="librarySettingForm.last_month_visit_checked" label="直接显示" name="last_month_visit" @change="handleCheckboxChange('last_month_visit', $event)" />
</el-form-item>
@ -134,13 +148,21 @@
<!-- 原图创接口表单 -->
<el-form ref="openForm" :model="openForm" size="small" label-width="100px">
<el-form-item label="OpenLib地址" prop="open_lib_http">
<span
<el-tooltip
v-if="!editStatus.openForm.open_lib_http"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('openForm', 'open_lib_http')"
>
{{ openForm.open_lib_http }}
</span>
</el-tooltip>
<el-input
v-else
ref="openFormopen_lib_http"
@ -150,13 +172,21 @@
/>
</el-form-item>
<el-form-item label="AppId" prop="open_lib_appId">
<span
<el-tooltip
v-if="!editStatus.openForm.open_lib_appId"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('openForm', 'open_lib_appId')"
>
{{ openForm.open_lib_appId }}
</span>
</el-tooltip>
<el-input
v-else
ref="openFormopen_lib_appId"
@ -166,13 +196,20 @@
/>
</el-form-item>
<el-form-item label="Secret" prop="open_lib_secret">
<span
<el-tooltip
v-if="!editStatus.openForm.open_lib_secret"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('openForm', 'open_lib_secret')"
>
{{ openForm.open_lib_secret }}
</span>
</el-tooltip>
<el-input
v-else
ref="openFormopen_lib_secret"
@ -191,13 +228,20 @@
<!-- 原热门搜索表单 -->
<el-form ref="hotForm" :model="hotForm" size="small" label-width="100px">
<el-form-item label="数据来源地址" prop="hot_search_http">
<span
<el-tooltip
v-if="!editStatus.hotForm.hot_search_http"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('hotForm', 'hot_search_http')"
>
{{ hotForm.hot_search_http }}
</span>
</el-tooltip>
<el-input
v-else
ref="hotFormhot_search_http"
@ -216,13 +260,20 @@
<!-- 原微信绑定表单 -->
<el-form ref="vxForm" :model="vxForm" size="small" label-width="100px">
<el-form-item label="AppID" prop="vx_appID">
<span
<el-tooltip
v-if="!editStatus.vxForm.vx_appID"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('vxForm', 'vx_appID')"
>
{{ vxForm.vx_appID }}
</span>
</el-tooltip>
<el-input
v-else
ref="vxFormvx_appID"
@ -232,13 +283,20 @@
/>
</el-form-item>
<el-form-item label="AppSecret" prop="vx_AppSecret">
<span
<el-tooltip
v-if="!editStatus.vxForm.vx_AppSecret"
class="item"
effect="dark"
content="双击输入框进行编辑"
placement="top"
>
<span
class="edit-readonly"
@dblclick="handleDblClick('vxForm', 'vx_AppSecret')"
>
{{ vxForm.vx_AppSecret }}
</span>
</el-tooltip>
<el-input
v-else
ref="vxFormvx_AppSecret"

4
src/views/digitalScreen/module/advSetting.vue

@ -5,10 +5,12 @@
<span class="data-title">播放设置</span>
<el-form ref="advForm" class="advForm" :model="advForm" size="small" label-width="100px">
<el-form-item label="图片切换时长" prop="welcome_play">
<div v-if="!editStatus.advForm.welcome_play" style="display: flex; justify-content: flex-start; width: 340px; height: 32px; align-items: flex-start;">
<el-tooltip v-if="!editStatus.advForm.welcome_play" class="item" effect="dark" content="双击输入框进行编辑" placement="top">
<div style="display: flex; justify-content: flex-start; width: 340px; height: 32px; align-items: flex-start;">
<span class="edit-readonly" @dblclick="handleDblClick('advForm', 'welcome_play')"> {{ advForm.welcome_play || '' }} </span>
<span class="edit-slot"></span>
</div>
</el-tooltip>
<el-input v-else ref="advFormwelcome_play" v-model="advForm.welcome_play" @blur="handleBlur('advForm', 'welcome_play')" @keyup.enter="handleBlur('advForm', 'welcome_play')"><template slot="append"></template></el-input>
</el-form-item>
</el-form>

3
src/views/digitalScreen/module/areaSetting.vue

@ -5,14 +5,15 @@
<span class="data-title">地图DataV</span>
<el-form ref="areaForm" class="areaForm" :model="areaForm" size="small" label-width="100px">
<el-form-item label="GeoJSON" prop="map_data">
<el-tooltip v-if="!editStatus.areaForm.map_data" class="item" effect="dark" content="双击输入框进行编辑" placement="top">
<span
v-if="!editStatus.areaForm.map_data"
class="edit-readonly"
style="padding: 4px 15px;"
@dblclick="handleDblClick('areaForm', 'map_data')"
>
{{ areaForm.map_data || '' }}
</span>
</el-tooltip>
<el-input
v-else
ref="areaFormmap_data"

13
src/views/digitalScreen/module/bookRecommend.vue

@ -13,10 +13,19 @@
v-for="(book, index) in bookList"
:key="book.id"
class="book-list-item"
:class="{ 'book-list-item--selected': book.selected }"
style="background-color: transparent;"
>
<div style="cursor: default;" @click.stop="toggleBookSelect(index)">
<img :src="book.imgPath ? (baseApi + '/api/fileRelevant/getImg?imgType=2&imgId=' + book.imgPath) : require('@/assets/images/screen/book.png')" alt="图书封面">
<div v-if="book.selected" class="select-style">
<div class="select-mask" />
<i class="iconfont icon-wancheng" style="font-size: 20px; right: 6px; top: 6px;" />
</div>
</div>
<!-- <span style="position: absolute; top: 0; left: 0; color: #fff;">{{ book.id }}</span> -->
<div style="position: relative; position: absolute; left: 0; bottom: 0; width: calc(100% - 15px); display: flex; justify-content: space-between; padding: 0 5px 0 10px; background: rgba(0,0,0,.5);">
<!-- <div style="position: relative; position: absolute; left: 0; bottom: 0; width: calc(100% - 15px); display: flex; justify-content: space-between; padding: 0 5px 0 10px; background: rgba(0,0,0,.5); cursor: pointer;">
<div class="book-select" @click.stop="toggleBookSelect(index)">
<i v-if="book.selected" class="iconfont icon-wancheng" />
<i v-else class="iconfont icon-weixuan" />
@ -24,7 +33,7 @@
<div class="book-delete" @click.stop="deleteBook(book)">
<i class="iconfont icon-shanchu" />
</div>
</div>
</div> -->
</swiper-slide>
</swiper>
</div>

276
src/views/inquiryMachine/column.vue

@ -0,0 +1,276 @@
<template>
<div class="app-container row-container">
<!--侧边部门数据-->
<!--工具栏-->
<div class="head-container">
<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.status" clearable size="small" placeholder="状态" class="filter-item" style="width: 100px" @change="crud.toQuery">
<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-select>
<rrOperation />
<el-checkbox v-model="fiterColumnZero" label="仅显示内容数量为 0 的栏目" name="fiterColumnZero" @change="handleFiterColumnZero($event)" />
</div>
<crudOperation :permission="permission">
<template v-slot:middle>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
</template>
<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>
</crudOperation>
</div>
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<el-dialog :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="110px">
<el-row>
<el-form-item label="栏目名称" prop="columnName">
<el-input v-model="form.columnName" style="width: 586px;" />
</el-form-item>
</el-row>
<el-form-item label="栏目编码" prop="columnNo">
<el-input v-model="form.columnNo" />
</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>
<el-form-item label="排序" prop="columnOrders">
<el-input-number
v-model.number="form.columnOrders"
:min="0"
:max="999"
controls-position="right"
/>
</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-radio-group>
</el-form-item>
<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>
</el-row>
</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>
<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 prop="columnName" label="栏目名称" />
<el-table-column prop="code" label="栏目编码" />
<el-table-column prop="type" label="栏目类型" />
<el-table-column prop="cotentType" label="内容类型" />
<el-table-column prop="deptsCount" label="内容数量" />
<el-table-column prop="columnOrders" label="排序" align="center" />
<el-table-column label="状态" align="center" prop="columnStatus">
<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)" />
</template>
</el-table-column>
<el-table-column prop="create" label="创建者" />
<el-table-column :show-overflow-tooltip="true" prop="createTime" label="创建日期">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
</template>
<script>
// import crudColumn from '@/api/inquiryMachine/index'
import crudfonds from '@/api/system/fonds'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
// import { exportFile } from '@/utils/index'
// import qs from 'qs'
import { mapGetters } from 'vuex'
const defaultForm = { id: null, columnName: null, columnNo: null, columnType: 1, columnOrders: 999, columnContentType: 1, columnStatus: 1, columnRemarks: null }
export default {
name: 'Column',
components: { pagination, crudOperation, rrOperation },
cruds() {
return CRUD({ title: '栏目', idField: 'fondsId', url: 'api/fonds/initFondsList', crudMethod: { ...crudfonds }, optShow: {
add: true,
edit: true,
del: false,
reset: true,
download: false,
group: false
}})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
return {
permission: {
add: ['admin', 'column:add'],
edit: ['admin', 'column:edit'],
del: ['admin', 'column:del']
},
enabledTypeOptions: [
{ key: '1', display_name: '启用' },
{ key: '0', display_name: '停用' }
],
fiterColumnZero: false,
rules: {
columnName: [
{ required: true, message: '请输入机构名称', trigger: 'blur' }
],
columnNo: [
{ required: true, message: '请输入栏目编码', trigger: 'blur' }
],
columnType: [
{ required: true, message: '请选择栏目类型', trigger: 'change' }
],
columnContentType: [
{ required: true, message: '请选择内容类型', trigger: 'change' }
],
columnOrders: [
{ required: true, message: '请输入排序', trigger: 'blur', type: 'number' }
],
columnStatus: [
{ required: true, message: '请选择状态', trigger: 'change' }
]
}
}
},
computed: {
...mapGetters([
'baseApi',
'user'
])
},
created() {
},
mounted() {
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
},
[CRUD.HOOK.afterRefresh]() {
},
//
[CRUD.HOOK.beforeToAdd](crud, form) {
},
//
[CRUD.HOOK.beforeToEdit](crud, form) {
},
//
[CRUD.HOOK.afterValidateCU](crud) {
console.log(crud.form)
return true
},
handleFiterColumnZero(val) {
console.log(val)
},
toDelete(datas) {
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.fondsId)
})
// crudfonds.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(() => {
})
},
changeStatus(data, val) {
this.$confirm('此操作将禁用 / 启用栏目 “' + data.fondsName + '”' + '<span>你是否还要继续?</span>', '提示', {
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
// crudfonds.FetchUpdateFondsStatus(data).then(res => {
// this.$message({ message: '', type: 'success', offset: 8 })
// }).catch(() => {
// data.fondsStatus = !data.fondsStatus
// })
}).catch(() => {
this.$message({ message: '已取消修改', offset: 8 })
// data.fondsStatus = data.fondsStatus ? 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(() => {
})
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-dialog {
.el-dialog__body {
.el-form-item{
&:nth-child(odd){
margin-right: 0 !important;
}
}
}
}
</style>

412
src/views/inquiryMachine/content.vue

@ -0,0 +1,412 @@
<template>
<div class="app-container">
<div class="container-main" style="justify-content: flex-start;">
<div class="elect-cont-left">
<div class="head-container">
<el-input v-model="filterText" clearable size="small" placeholder="输入栏目名称搜索" prefix-icon="el-icon-search" class="filter-item" />
</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>
<!--用户数据-->
<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-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>
<crudOperation :permission="permission">
<template v-slot:middle>
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">
<i class="iconfont icon-shanchu" />
删除
</el-button>
</template>
</crudOperation>
</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">
<div class="setting-dialog">
<div class="content-parent-info">
<div>所属栏目<span>图书馆简介</span></div>
<div>栏目类型<span>单页展示</span></div>
<div>栏目类型<span>图文</span></div>
</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="width: 1000px;" />
</el-form-item>
</el-row>
<el-form-item label="来源" prop="original">
<el-input v-model="form.original" />
</el-form-item>
<el-form-item label="作者" prop="author">
<el-input v-model="form.author" />
</el-form-item>
<el-form-item label="责编" prop="editor">
<el-input v-model="form.editor" />
</el-form-item>
<mavon-editor
:value="form.content"
:subfield="true"
:default-open="'edit,preview'"
:editable="true"
:ishljs="true"
@change="handleEditorChange"
/>
</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>
<!--表格渲染-->
<div class="container-right">
<span class="right-top-line" />
<span class="left-bottom-line" />
<el-table
ref="table"
v-loading="crud.loading"
height="calc(100vh - 330px)"
:data="tableData"
:row-key="getRowKey"
@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="fondsName" />
<el-table-column label="创建者" prop="create" />
<el-table-column prop="createTime" label="创建日期">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<pagination v-if="crud.data.length!==0" />
</div>
</div>
</div>
</div>
</template>
<script>
import crudDept from '@/api/system/dept'
import { FetchFondsAll } from '@/api/system/fonds'
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'
const defaultForm = { id: null, title: null, original: '', author: '', editor: '', content: '' }
export default {
name: 'Content',
components: { crudOperation, pagination },
cruds() {
return CRUD({ title: '内容', idField: 'deptsId', url: 'api/depts/initDeptsList', crudMethod: { ...crudDept }, optShow: {
add: true,
edit: true,
del: false,
reset: true,
download: false,
group: false
},
queryOnPresenterCreated: false
})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
dicts: ['dept_status'],
data() {
return {
depts: [],
tableData: [],
rules: {
title: [
{ required: true, message: '标题不可为空', trigger: 'blur' }
]
// deptsName: [
// { required: true, message: '', trigger: 'blur' }
// ],
// isTop: [
// { required: true, message: '', trigger: 'change' }
// ],
// deptsParentsId: [
// { required: true, message: '', trigger: 'change' }
// ],
// deptsOrders: [
// { required: true, message: '', trigger: 'blur', type: 'number' }
// ],
// deptsStatus: [
// { required: true, message: '', trigger: 'change' }
// ]
},
fondsName: '',
fondsDatas: [],
filterText: '',
defaultExpandedKeys: [],
fondsOptions: [],
defaultProps: { children: 'children', label: 'fondsName' },
permission: {
add: ['admin', 'dept:add'],
edit: ['admin', 'dept:edit'],
del: ['admin', 'dept:del']
},
enabledTypeOptions: [
{ key: '1', display_name: '激活' },
{ key: '0', display_name: '锁定' }
],
levelNumber: 0
}
},
computed: {
...mapGetters([
'baseApi',
'user'
])
},
watch: {
filterText(val) {
this.$refs.tree.filter(val)
}
},
mounted() {
this.getFondsDatas()
},
methods: {
// vue-treeSelectunknown
getAutoNameUnknown(name) {
if (name.lastIndexOf('unknown') > -1) {
return name.split('(')[0]
} else {
return name
}
},
getRowKey(row) {
return row.deptsId
},
resetQuery() {
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()
},
[CRUD.HOOK.beforeRefresh]() {
this.tableData = []
},
[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) {
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.form.id = form.deptsId
},
//
[CRUD.HOOK.afterValidateCU](crud) {
console.log(crud.form)
return false
},
handleEditorChange(value) {
this.form.content = value
},
getFondsDatas() {
const parent = {}
parent.id = 0
parent.fondsName = '栏目'
FetchFondsAll().then(res => {
parent.children = res
this.fondsDatas.push(parent)
this.fondsOptions = res
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])
})
})
},
filterNode(value, data) {
if (!value) return true
return data.fondsName.indexOf(value) !== -1
},
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)
}
}
},
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) {
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)
})
crudDept.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(() => {
})
} else {
this.$message({ message: '当前选择条目中有用户存在不可直接操作删除', type: 'error', offset: 8 })
}
},
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children
}
return {
id: node.deptsId,
label: node.deptsName,
children: node.children
}
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .expanded-list.el-table .el-table__cell:first-child .cell{
margin-left: -20px;
}
.el-tree{
.el-tree-node__content{
.tree-text{
font-size: 16px;
font-weight: 600;
}
}
.el-tree-node__children{
.tree-text {
font-size: 14px !important;
font-weight: normal;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
display: inline-block;
min-width: 170px;
}
}
}
.inquiry-dialog{
::v-deep .el-dialog{
width: 1170px !important;
.el-dialog__body .el-form-item .el-form-item__content{
width: 254px !important;
}
.v-note-wrapper{
height: 420px;
}
}
}
.content-parent-info{
display: flex;
justify-content: flex-start;
align-items: center;
line-height: 32px;
padding: 0 0 20px 48px;
& div{
margin-right: 20px;
span{
font-weight: bold;
color: #0c0e1e;
}
}
}
</style>
Loading…
Cancel
Save