KMS移动端代码提交

This commit is contained in:
zhaol 2025-07-07 13:55:22 +08:00
parent 64080c927b
commit 44069342f3
37 changed files with 8638 additions and 0 deletions

View File

@ -0,0 +1,21 @@
<template>
<div id="app">
<router-view/>
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
height: 100%;
overflow: hidden;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,109 @@
import axios from 'axios'
import store from '../store'
// 创建axios请求实例
// const request = axios.create({
// baseURL: axiosBaseUrl,
// timeout: 1000,
// headers: {
// 'Content-Type': 'application/json; charset=utf-8'
// }
// })
axios.defaults.baseURL = typeof axiosBaseUrl == "undefined" ? "" : axiosBaseUrl; // 设置跨域代理接口统一的前置地址
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
// 添加请求拦截器
axios.interceptors.request.use(function (request) {
// 在发送请求之前做些什么
if(request.method == 'post'){
request.params = {};
}
return request
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error)
})
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
// 只返回数据
return response.data
}, function (error) {
if(error.response == null){
throw error;
}
const status = error.response.status
if (status >= 500) {
alert('服务繁忙请稍后再试')
} else if (status >= 400) {
alert(error.response.data.message)
}
// 对响应错误做点什么
console.dir(error)
return Promise.reject(error)
})
function _toChangeData(data){
let dataArray = [];
for(let key in data){
dataArray.push(encodeURIComponent(key)+"="+encodeURIComponent(data[key]));
}
return dataArray.join("&");
}
//可能需要更改,暂时用不到
const get = (params) => {
return axios({
method: "get",
url: params.url,
params: params.params
});
}
const post = (params) => {
let postConfig = {
method: "post",
url: params.url,
data: params.data
}
//从vuex中获取sessionId
postConfig.data.sid = store.state.sessionId;
postConfig.data = _toChangeData(postConfig.data);
return axios(postConfig);
}
const aslp = (params) => {
// {
// portalUrl : "",
// authentication : store.state.sessionId,
// sourceAppId : "appid",
// aslp : "aslp://XXXX",
// params :{
// aa:1,
// bb:2
// }
// }
let datas = {
authentication : store.state.sessionId,
sourceAppId : params.sourceAppId,
aslp : params.aslp,
}
Object.assign(datas,params.params)
let postConfig = {
method: "post",
url: params.portalUrl,
params: datas
}
postConfig.data = _toChangeData(postConfig.data);
return axios(postConfig);
}
// const delete = (url, data) => request.delete(url, data)
// const head = (url, data) => request.head(url, data)
// const options = (url, data) => request.options(url, data)
// const put = (url, data) => request.put(url, data)
// const patch = (url, data) => request.patch(url, data)
export default {
get,
post,
aslp
}

View File

@ -0,0 +1,122 @@
<template>
<div class="select">
<van-field
v-model="result"
v-bind="$attrs"
readonly
is-link
@click="show = !show"
/>
<van-popup v-model="show" position="bottom">
<!-- $attrs 可以把根节点的attr放到目标组件上如此可以像使用 DatePicker 组件一样使用这个新组件 -->
<van-datetime-picker
v-bind="$attrs"
:type="type"
title="请选择日期"
:min-date="minDate"
:max-date="maxDate"
@cancel="cancel"
@confirm="confirm"
/>
</van-popup>
</div>
</template>
<script>
export default {
name: 'VantFieldDate',
model: {
prop: 'selectValue'
},
props: {
type: {
type: String,
default: null
},
selectValue: {
type: [String, Number, Date],
default: undefined // nullDatePicker
},
minDate: {
type: Date,
default: undefined
},
maxDate: {
type: Date,
default: undefined
},
//
format: {
type: String,
default: null
}
},
data() {
return {
show: false
}
},
computed: {
// Date
formatFormula() {
if (this.format) {
return this.format
} else if (this.type === 'date') {
return 'yyyy-MM-dd'
} else if (this.type === 'datetime') {
return 'yyyy-MM-dd hh:mm'
} else if (this.type === 'time') {
return 'hh:mm'
} else if (this.type === 'year-month') {
return 'yyyy-MM'
}
},
result() {
return this.selectValue ? this.dateFormat(this.selectValue, this.formatFormula) : ''
}
},
methods: {
dateFormat: (value, format) => {
if (!value) return
if (!(value instanceof Date)) {
value = new Date(value)
}
let o = {
'M+': value.getMonth() + 1, // month
'd+': value.getDate(), // day
'h+': value.getHours(), // hour
'm+': value.getMinutes(), // minute
's+': value.getSeconds(), // second
'q+': Math.floor((value.getMonth() + 3) / 3), // quarter
'S': value.getMilliseconds() // millisecond
}
if (!format || format === '') {
format = 'yyyy-MM-dd hh:mm:ss'
}
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (value.getFullYear() + '').substr(4 - RegExp.$1.length))
}
for (let k in o) {
if (new RegExp('(' + k + ')').test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
}
}
return format
},
confirm(value) {
// v-model value
// input vee-validate
this.$emit('input', value.getTime(), value)
// onChange @input v-model
this.$emit('change', value.getTime(), value)
this.show = false;
},
cancel() {
this.$emit('cancelDate');
this.show = false
}
}
}
</script>

View File

@ -0,0 +1,113 @@
<template>
<div class="select">
<van-field
class="fieldVan"
v-model="result"
v-bind="$attrs"
:disabled="disabled"
ref="picker"
readonly
is-link
@click="onShow"
/>
<van-popup v-model="show" position="bottom" >
<van-picker
show-toolbar
value-key="text"
class="pickerVan"
:columns="columns"
:default-index="defaultIndex"
:title="$attrs.label"
@cancel="show = !show"
@confirm = "onConfirm"
@change="onChange"
/>
</van-popup>
</div>
</template>
<script>
export default {
model: {
prop: 'selectValue'
},
props: {
columns: {
type: Array
},
selectValue: {
type: String
},
disabled: {
type: Boolean
},
defaultIndex:{
type:Number
}
},
data() {
return {
show: false,
result: this.selectValue,
}
},
methods: {
onShow() {
if (!this.disabled) {
this.show = !this.show
}
},
onConfirm(item,index){
if(Array.isArray(item)){
this.result = item[1];
}else{
this.result = item;
}
this.show = !this.show
},
onChange(picker, item) {
},
changeValue(value){
this.result = value;
}
},
watch: {
selectValue: function (newVal) {
this.value = newVal
},
result(newVal) {
this.$emit('input', newVal)
}
},
mounted(){
this.defaultIndex = this.defaultIndex;
}
}
</script>
<style>
.select .van-field .van-cell__right-icon {
transform: rotate(90deg);
position: absolute;
right: 22px;
line-height: 30px;
height: 30px;
}
.select .van-cell {
display: flex;
align-items: center;
}
.van-picker .van-picker-column{
overflow: unset !important;
width: calc(100% - 64px) !important;
}
.van-datetime-picker .van-picker-column{
overflow: hidden !important;
}
.select .van-field__control{
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
</style>

View File

@ -0,0 +1,13 @@
<template>
</template>
<script>
export default {
name: 'index'
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,619 @@
<template>
<div>
<ul v-if="list.length > 0"
class="list van-clearfix"
ref="listBox"
@click.stop="clickOutMenu">
<van-list
v-model="pageSetting.loading"
:finished="pageSetting.finished"
@load="downLoad"
finished-text="没有更多了"
loading-text="加载中..."
:offset="offset"
>
<li v-for="(item,index) in currentList"
:key="index"
@click="onDetail(item)">
<div class="top"
ref="elTop">
<div class="left"
:style="type != ''?'width:100%':''"
:knwlname="item.knwlName">
<template v-if="type=='search'">
<div class="title"
v-html="item.title"></div>
</template>
<template v-else>
<div class="title"
:style="(type=='borrow'&&item.readFlag)?'color:#333':''"
v-html="item.cardName?item.cardName:item.favoriteTitle"></div>
</template>
<div class="description"
v-show="type == 'search'&&item.content&&item.content.length>0"
v-html="item.content"></div>
<div class="steps"
v-show="type == 'search'"
:style="type=='search'?'color:#60BA99; margin-top:6px;':''">
{{ item.dimensionPath }}
</div>
<div class="description"
:style="(type == 'knwlhome'||type=='publish')?'margin-bottom:6px;margin-top:2px;':'margin-top:8px'">
<template v-if="type=='search'">
<label>{{ item.fileCreateTime }}</label>
<label class="line">|</label>
<label>{{ item.fileCreateUser }}</label>
<a v-show="item.onlineLevel===1"
@click.stop="downLoadFile(item)">
<i class="awsui-iconfont"
style="position: absolute;right: 0; color: #83B9F5;">&#xe7ae;</i>
</a>
</template>
<template v-else>
{{ item.publishUsername ? item.publishUsername + "" : "" }}
<font v-show="item.publishUsername"
class="divids">|</font>
{{ item.publishTime ? item.publishTime + "" : item.createTime + "" }}
<font v-show="type!='favorite'"
class="divids">|</font>
{{ type != "favorite" ? (item.readCount ? "阅读(" + item.readCount + ")" : "阅读(" + 0 + ")") : "" }}
<font v-show="type=='knowl'||type == 'knwlhome'"
class="divids">|</font>
{{ type == "knowl"||type == "knwlhome" ? (item.commentCount ? "讨论(" + item.commentCount + ")" : "讨论(" + 0 + ")") : "" }}
<font v-show="type=='borrow'"
class="divids">|</font>
{{ type == "borrow" ? item.STATUS : "" }}
<font v-show="type=='borrow'&&item.STATUS === '同意'&&(item.CONTROLTYPE.indexOf('限制')>-1)"
class="divids">|</font>
{{ (type == "borrow" && item.STATUS === "同意" && (item.CONTROLTYPE.indexOf("限制") > -1)) ? readType(item) : "" }}
<font v-show="item.myKnowlage"
class="publicstate"
:style="item.isPublished?'':'color:#e29b1a'">{{ item.isPublished ? " 已发布" : " 未发布" }}</font>
<font v-show="type=='publish'"
class="divids">|</font>
{{ type == "publish" ? item.publishStatus : "" }}
</template>
</div>
<i v-show="item.myKnowlage||type=='publish'"
class="awsui-iconfont knowlage-icon"
@click.stop="onMenu(item)">&#xe611;</i>
</div>
</div>
<div class="bottom"
v-show="type == 'knwlhome'||type=='publish'">
{{ item.dimensionPath }}
</div>
</li>
</van-list>
</ul>
<div class="list"
v-else>
<div class="con">
<div class="img">
<img v-if="type=='search'"
src="../assets/no_search.png"
alt=""
style="width: 125px;">
<img v-else
src="../assets/no_content.png"
alt=""
style="width: 125px;">
</div>
<div v-if="type=='search'||type=='knwlhome'"
class="text">没有搜索到匹配结果
</div>
<div v-else-if="type=='borrow'"
class="text">暂无借阅知识
</div>
<div v-else-if="type=='knowl'"
class="text">暂无知识
</div>
<div v-else-if="type=='publish'"
class="text">暂无发布知识
</div>
<div v-else-if="type=='favorite'"
class="text">暂无收藏
</div>
</div>
</div>
<van-dialog v-model="showDialog"
show-cancel-button
@confirm="handleDialog">
<span style="text-align: center;padding: 20px 0;display: inline-block;width: 100%;">确认删除选中的知识</span>
</van-dialog>
<van-dialog v-model="showUnReleaseDialog"
show-cancel-button
@confirm="handleReleaseDialog">
<span style="text-align: center;padding: 20px 0;display: inline-block;width: 100%;">确认取消发布选中的知识</span>
</van-dialog>
<van-action-sheet v-model="menushow"
:closeable="false"
:description="activeCardName">
<div class="content"
style="width: 100%;padding: 20px 0px">
<div :style="styleWidth"
class="options_op"
@click="editorCard">
<div class="icon"><i class="awsui-iconfont">&#xe622;</i></div>
<div class="label">编辑</div>
</div>
<div :style="styleWidth"
v-if="type!='publish'"
class="options_op"
@click="releaseFun">
<div class="icon"><i class="awsui-iconfont">&#xe745;</i></div>
<div class="label">发布</div>
</div>
<div :style="styleWidth"
v-else
class="options_op"
@click="unreleaseFun">
<div class="icon"><i class="awsui-iconfont">&#xe745;</i></div>
<div class="label">取消发布</div>
</div>
<div :style="styleWidth"
class="options_op"
@click="logData">
<div class="icon"><i class="awsui-iconfont">&#xe6de;</i></div>
<div class="label">日志</div>
</div>
<div :style="styleWidth"
v-show="type=='knowl'"
class="options_op"
@click="deleteCardConfrim">
<div class="icon"><i class="awsui-iconfont">&#xe626;</i></div>
<div class="label">删除</div>
</div>
</div>
</van-action-sheet>
</div>
</template>
<script>
import awsuiAxios from "../awsuiAxios";
export default {
name: "list",
props: {
myPublicCount: {
type: Number,
default: 0
},
type: {
type: String,
default: ""
},
list: {
type: Array,
default: () => [{}]
},
searchval: {
type: String,
default: null
},
pageSetting: {
type: Object,
default: () => {
return {};
}
}
},
data() {
return {
offset: 10,
styleWidth: "width:25%;",
currentList: [],
searchText: this.searchval,
menuActiveId: "",
activeCard: {},
activeCardName: "",
menushow: false,
showDialog: false,
showUnReleaseDialog: false,
topHeight: 0,
};
},
methods: {
readType(item) {
if (item.STATUS === "同意") {
if (item.CONTROLTYPE === "限制阅读次数") {
return "阅读次数:" + item.READTIMES + " / " + item.TIMES;
} else if (item.CONTROLTYPE === "限制有效日期") {
return "有效期至:" + item.ENDDATE;
}
}
},
backTop() {
if (this.$refs.listBox) {
this.$refs.listBox.scrollTop = 0;
}
},
downLoadFile(obj) {
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_filePreview",
fileId: obj.fileId
}
}).then(function (r) {
if (r.result == "error") {
that.$toast({message: r.data ? r.data.desc : r.msg, overlay: true});
} else {
// let a = document.createElement('a');
// a.href = r.data.downloadURL;
// a.click();
// a.remove();
window.location.href = r.data;
}
});
},
downLoad() {
this.pageSetting.loading = true;
setTimeout(() => {
this.$emit("downLoadMore", {});
}, 300);
},
clickOutMenu(e) {
this.list.forEach(el => {
let iconId = document.getElementById(el.id + "icon");
if (iconId) {
if (!iconId.contains(e.target)) {
}
}
});
},
onDetail(el) {
if (this.type == "borrow" && el.readFlag) {
} else if (el.knwlId) {
} else {
this.$router.push({
name: "know-detail",
params: {
id: el.cardId ? el.cardId : el.favoriteId,
dimensionId: el.dimensionId ? el.dimensionId : "",
boId: el.boId
}
});
}
},
onMenu(item) {
this.handleScroll();
this.activeCard = item;
this.isPublished = item.isPublished;
this.menushow = true;
this.activeCardName = item.cardName;
},
deleteCardConfrim() {
this.showDialog = true;
this.menushow = false;
},
handleDialog() {
this.showDialog = false;
this.deleteCard();
},
editorCard() {
this.$router.push({
name: "new-knowledge",
params: {
cardId: this.activeCard.cardId,
dimensionId: this.activeCard.dimensionId,
type: "editor"
}
});
},
deleteCard() {
let that = this;
//
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_delete_card",
cardIds: this.activeCard.cardId
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
that.$toast({message: r.data ? r.data.desc : r.msg, overlay: true});
} else {
that.$toast({message: "删除成功", overlay: true});
let datas = that.list;
for (let i = 0; i < datas.length; i++) {
if (datas[i]["cardId"] == that.activeCard.cardId) {
that.list.splice(i, 1);
break;
}
}
that.$emit("changeSizeInfo");
}
});
},
releaseFun() {
let that = this;
this.menushow = false;
that.publicCardId = this.activeCard.cardId;
let validDateTmp = this.activeCard.validDate;
let datee = new Date();
let mm = datee.getMonth() + 1;
let currentDate = datee.getFullYear() + "-" + (mm < 10 ? "0" : "") + mm + "-" + datee.getDate();
if (validDateTmp && validDateTmp != "" && validDateTmp < currentDate) {
this.$toast({message: "知识[" + this.activeCard.cardName + "]已过期,不允许发布", overlay: true});
return false;
}
//
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_check_card_has_file",
cardIds: JSON.stringify([that.publicCardId])
},
}).then(function (r) {
that.loading = false;
if (r.result != "ok") {
that.$toast({message: r.data ? r.data.desc : r.msg, overlay: true});
} else {
that.$router.push({
name: "release-knowledge",
params: {
name: that.activeCard.cardName,
id: that.publicCardId,
type: "myknowledge"
}
});
}
});
},
unreleaseFun() {
this.menushow = false;
this.dialogMsg = "确认取消发布知识目录[" + this.activeCard.dimensionPath + "]下的知识[" + this.activeCard.cardName + "]吗?";
this.showUnReleaseDialog = true;
},
handleReleaseDialog() {
this.showUnReleaseDialog = false;
let that = this;
that.activePublishId = this.activeCard.publishId;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_cancel_publish_card",
publishId: this.activeCard.publishId,
},
}).then(function (r) {
if (r.result == "error") {
that.$toast({message: r.data ? r.data.desc : r.msg, overlay: true});
} else {
that.$toast({message: "取消发布成功", overlay: true});
let datas = that.list;
for (let i = 0; i < datas.length; i++) {
if (datas[i]["publishId"] == that.activePublishId) {
that.list.splice(i, 1);
break;
}
}
that.myPublicCount--;
that.$emit("refreshCount", that.myPublicCount);
}
});
},
logData() {
this.menushow = false;
this.$router.push({
name: "knwlborrow",
params: {
id: this.activeCard.cardId,
name: this.activeCard.cardName,
}
});
},
getTopHeight() {
//
this.$nextTick(function () {
let topHeight = this.$refs.elTop[0].offsetHeight - 10;
this.topHeight = topHeight;
});
},
handleScroll() {
var scrollTop = this.$refs.listBox.scrollTop;
let topHeight = this.$refs.elTop[0].offsetHeight - 10;
var offsetTop = 0;
if (scrollTop <= 200) {
offsetTop = topHeight;
} else {
offsetTop = -(topHeight + 80);
}
this.topHeight = offsetTop;
}
},
mounted() {
if (this.list.length > 0) {
this.box = this.$refs.listBox;
}
if (this.type == "publish") {
this.styleWidth = "width:33.3333333%;";
} else {
this.styleWidth = "width:25%;";
}
},
watch: { //loadsh
type: function () {
},
list: {
immediate: true,
handler(value) {
this.currentList = value;
}
}
}
};
</script>
<style scoped>
.divids {
color: #dcdcdc;
margin: 0px 3px;
}
.list {
padding: 0 12px;
width: calc(100% - 24px);
height: calc(100vh - 148px);
overflow-y: auto;
position: relative;
}
.list span, .list label {
display: inline-block;
}
.list li {
width: 100%;
position: relative;
padding-top: 2px;
padding-bottom: 0px;
}
.list li:not(:last-child) {
border-bottom: 0.33px solid #e9e9e9;
}
.list li .top {
padding: 11px 0 0;
width: 100%;
}
.list li .top .left {
width: 100%;
}
.list li .top .left .title {
font-size: 16px;
color: #378DEC;
line-height: 18px;
/*margin-bottom: 8px;*/
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.list li .top .right .name {
color: #333;
font-size: 12px;
}
.list li .top .left .description, .list li .top .right .time {
color: #999999;
line-height: 15px;
font-size: 13px;
position: relative;
width: 100%;
/*float: left;*/
}
.list li .top .left .description {
font-size: 12px;
}
.list li .top .left .description .line {
display: inline-block;
margin: 0 8px;
color: #E8E8E8;
}
.list li .top .left .description {
width: calc(100% - 2px);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
display: inline-block;
}
.list li .top .left .steps {
padding: 11px 0 13px;
}
.list li .top .left .steps, .list li .bottom {
line-height: 15px;
color: #808080;
width: 100%;
font-size: 11px;
}
.list li .bottom {
margin-bottom: 4px;
}
.list li .top .left .steps {
padding: 0 0 10px;
}
.list li .menu li {
width: auto;
border: none;
padding: 10px 0;
cursor: pointer;
}
.list li .menu .text {
padding: 0 14px;
display: inline-block;
}
.con {
position: absolute;
width: 100%;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
.con .img {
width: 125px;
height: 125px;
margin: 0 auto;
}
.con .text {
color: #999;
line-height: 20px;
font-size: 13px;
width: 100%;
}
.options_op {
/*width: 25%;*/
display: inline-block;
text-align: center;
}
.options_op .icon {
font-size: 16px;
margin-bottom: 10px;
}
.options_op .label {
font-size: 12px;
}
.knowlage-icon {
font-size: 13px;
float: right;
position: absolute;
right: 1px;
bottom: 6px;
}
.publicstate {
float: right;
margin-right: 22px;
}
</style>

View File

@ -0,0 +1,68 @@
<template>
<van-radio-group v-model="radio">
<van-cell-group>
<van-cell title="最新发布" clickable @click="radio = '1'">
<van-radio name="1">
<template #icon="props">
<span v-html="props.checked ? activeIcon : inactiveIcon"></span>
</template>
</van-radio>
</van-cell>
<van-cell title="最高讨论" clickable @click="radio = '2'">
<van-radio name="2">
<template #icon="props">
<span v-html="props.checked ? activeIcon : inactiveIcon"></span>
</template>
</van-radio>
</van-cell>
<van-cell title="最高阅读" clickable @click="radio = '3'">
<van-radio name="3">
<template #icon="props">
<span v-html="props.checked ? activeIcon : inactiveIcon"></span>
</template>
</van-radio>
</van-cell>
<van-cell title="最高评分" :style="activeColor ? 'color:#378dec;' : ''" clickable @click="radio = '4'">
<van-radio name="4">
<template #icon="props">
<span v-html="props.checked ? activeIcon : inactiveIcon"></span>
</template>
</van-radio>
</van-cell>
</van-cell-group>
</van-radio-group>
</template>
<script>
export default {
name: 'radio',
data () {
return {
radio: '1',
activeColor: '',
inactiveColor: '',
activeIcon: '<i class="awsui-iconfont" style="color:#378dec;margin-right:5px;">&#xe639;</i>',
inactiveIcon: '<i class="awsui-iconfont" style="color:#fefefe;margin-right:5px;">&#xe639;</i>'
}
},
methods: {}
}
</script>
<style scoped>
.van-cell__value {
margin-left: 10px;
margin-right: 5px;
}
.van-cell {
padding: 10px 0 10px 17px !important;
}
.van-cell__title, .van-cell__value {
-webkit-box-flex: none;
-webkit-flex: none;
flex: none;
}
</style>

View File

@ -0,0 +1,814 @@
<template>
<div class="search">
<van-cell-group>
<form action="/">
<van-search v-model="title" :disabled="!isFullsearchAppActive" :placeholder="isFullsearchAppActive?'请输入文件内容关键词...':'全文检索应用不可用,无法使用该功能'" show-action @search="onSearch" @input="onInput"
@clear="onClear">
<div slot="action" >
<i @click="showSearchDetail" class="awsui-iconfont" style="color:#1e1e1e;position: absolute;right: 35px;">&#xe64d;</i>
<i @click="showSearchType" class="awsui-iconfont" style="color:#1e1e1e;">&#xe82d;</i>
</div>
</van-search>
<van-popup v-model="show" position="right" :style="{ width: '90%' }">
<van-cell-group :border="false" class="search-cell">
<div class="detail_head">
<span class="detail_cancel" @click="cancelDetail">取消</span>
<span style="font-size: 15px;">详细搜索</span>
<span class="detail_rest" @click="reset">重置</span>
</div>
<!--<van-field v-model="creater" label="发布人" placeholder="请输入发布人姓名"/>-->
<van-field type="text"
label="发布人"
v-model="searchUerText"
@focus="showUserDropdown=true"
@blur="handleUserBlur"
@keydown.up="navigateUpUser"
@keydown.down="navigateDownUser"
@keydown.enter="selectUserOptions"
placeholder="请输入发布人"
class="search-input"/>
<!-- 下拉列表 -->
<div v-if="showUserDropdown" class="dropdown-menuuser">
<div
v-for="(option, index) in filteredUserOptions"
:key="index"
class="dropdown-itemuser"
@click="selectUserOptions(option)"
:class="{ 'dropdown-item-activeuser': selectedUserIndex === index }"
>
{{ option.text }}
</div>
</div>
<van-field style="display: none" v-model="selectedUser" label="人员ID" />
<van-field readonly v-model="startDateTitle" label="起始日期" placeholder="请选择起始日期"
@click="startDatePopup = true"/>
<van-popup v-model="startDatePopup" position="bottom" style="height:300px" get-container="body">
<van-datetime-picker v-model="currentStartDate" type="date" :max-date="startMaxDate"
@confirm="confirmStartDate" @cancel="cancelStartDate" :show-toolbar="true"
cancel-button-text="清除"/>
</van-popup>
<van-field readonly v-model="endDateTitle" label="结束日期" placeholder="请选择结束日期" @click="endDatePopup = true"/>
<van-popup v-model="endDatePopup" position="bottom" style="height:300px" get-container="body">
<van-datetime-picker v-model="currentEndDate" :min-date="endMinDate" type="date" :max-date="endMaxDate"
@confirm="confirmEndDate" @cancel="cancelEndDate" :show-toolbar="true"
cancel-button-text="清除"/>
</van-popup>
<van-field type="text"
label="发布部门"
v-model="searchText"
@focus="showDropdown = true"
@blur="handleBlur"
@keydown.up="navigateUp"
@keydown.down="navigateDown"
@keydown.enter="selectOption"
placeholder="请输入发布部门"
class="search-input"/>
<!-- 下拉列表 -->
<div v-if="showDropdown" class="dropdown-menu">
<div
v-for="(option, index) in filteredOptions"
:key="index"
class="dropdown-item"
@click="selectOption(option)"
:class="{ 'dropdown-item-active': selectedIndex === index }"
>
{{ option.text }}
</div>
</div>
<van-field style="display: none" v-model="selectedDep"/>
<van-field v-model="knwlName" label="知识名称" placeholder="请输入知识名称"/>
<!--<van-field v-model="knwlTag" label="标签" placeholder="请输入知识标签"/>-->
<div class="footer">
<van-button style="width: 85%;" native-type="button" size="small" type="info" @click="onDetailSearch">查询</van-button>
</div>
</van-cell-group>
</van-popup>
<van-popup v-model="typeShow" position="right" :style="{ width: ' calc(85% - 10px)',height:'100%',padding:'10px 10px' }">
<div class="schema_head">
<span class="schema_cancel" @click="cancelSchema">取消</span>
<span style="font-size: 15px;">元数据</span>
<span class="schema_rest" @click="resetSchema">重置</span>
</div>
<ul class="list" style="height: calc(100% - 96px);overflow: hidden;overflow-y: auto">
<li v-for="(item,index) in schemaList" :key="index">
<div :class="item.isNullable==1?'title':'title required' " >
{{item.schemaTitle}}
<span v-show="item.showType==1" @click="clearData(item)" style="float: right">清空</span>
</div>
<div class="con">
<span v-show="item.showType<2" class="classify"
:style="(index+1)%3===0?'width: calc(100% / 3 - 17px); margin-right:1px;':''"
v-for="(el,index) in item.attrList" :key="index" @click="onClassify(el,item)"
:class="{classActive:el.active}">
<label class="name">{{el.attrTitle}}</label>
</span>
<div v-show="item.showType==2">
<van-field v-model="item.value" placeholder="请输入..." />
</div>
</div>
</li>
</ul>
<div class="schema_footer">
<van-button style="width: 85%" native-type="button" size="small" type="info" @click="schemaSearch">确定</van-button>
</div>
</van-popup>
</form>
</van-cell-group>
</div>
</template>
<script>
import awsuiAxios from "../awsuiAxios";
import { Popup, Field, Cell, CellGroup, Empty } from 'vant';
export default {
name: 'search',
components: {
[Popup.name]: Popup,
[Field.name]: Field,
[Cell.name]: Cell,
[CellGroup.name]: CellGroup,
[Empty.name]: Empty
},
props: {
keyword: { // 使value
type: String,
default: ''
},
filterSetting:{
type:Object,
default:()=>{
return {};
}
},
isFullsearchAppActive:Boolean
},
data() {
return {
dimensionResult:"",
typeShow:false,
show: false,
title: this.keyword,
creater: '',
createrDept: '',
knwlName: '',
publishDep: '',
knwlTag: '',
currentEndDate: new Date(),
startMaxDate: new Date(),
endMaxDate: new Date(),
endMinDate:new Date(),
startDatePopup: false,
endDatePopup: false,
startDateTitle: '',
endDateTitle: '',
schemaList:[],
/**********************发布部门*********************/
selectedOption: null,
searchText: '',
showDropdown: false,
selectedIndex: -1,
options: [
],
selectedDep:"",
/***********************发布人****************************/
selectedUserOption: null,
searchUerText: '',
showUserDropdown: false,
selectedUserIndex: -1,
useroptions: [
],
selectedUser:""
}
},
computed: {
filteredOptions() {
return this.options.filter(option =>
option.text.toLowerCase().includes(this.searchText.toLowerCase())
);
},
filteredUserOptions() {
return this.useroptions.filter(option =>
option.text.toLowerCase().includes(this.searchUerText.toLowerCase())
);
},
currentStartDate: {
get() {
let now = new Date()
now.setMonth(now.getMonth() - 1)
return now
},
set() {
}
}
},
methods: {
/**************************发布部门********************************/
handleBlur() {
//
setTimeout(() => {
if (!this.searchText) {
this.showDropdown = false;
this.selectedIndex = -1;
}
}, 200); //
},
navigateUp() {
if (this.selectedIndex > 0) {
this.selectedIndex -= 1;
} else if (this.selectedIndex === -1 && this.filteredOptions.length > 0) {
this.selectedIndex = this.filteredOptions.length - 1;
}
this.scrollToSelected();
},
navigateDown() {
if (this.selectedIndex < this.filteredOptions.length - 1) {
this.selectedIndex += 1;
} else {
this.selectedIndex = -1;
}
this.scrollToSelected();
},
scrollToSelected() {
const dropdownMenu = this.$el.querySelector('.dropdown-menu');
if (dropdownMenu && this.selectedIndex !== -1) {
const item = dropdownMenu.querySelector('.dropdown-item-active') || dropdownMenu.children[0];
item.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
},
selectOption(option) {
this.showDropdown = false;
this.selectedIndex = -1;
this.selectedOption = option.text;
this.searchText = option.text; //
this.selectedDep=option.value;
},
/********************发布部门结束*********************************/
/**********************发布人开始***************************************/
handleUserBlur() {
//
setTimeout(() => {
if (!this.searchUerText) {
this.showUserDropdown=false;
this.selectedUserIndex=-1;
}
}, 200); //
},
navigateUpUser() {
if (this.selectedUserIndex > 0) {
this.selectedUserIndex -= 1;
} else if (this.selectedUserIndex === -1 && this.filteredUserOptions.length > 0) {
this.selectedUserIndex = this.filteredUserOptions.length - 1;
}
this.scrollToSelectedUser();
},
navigateDownUser() {
if (this.selectedUserIndex < this.filteredUserOptions.length - 1) {
this.selectedUserIndex += 1;
} else {
this.selectedUserIndex = -1;
}
this.scrollToSelectedUser();
},
scrollToSelectedUser() {
const dropdownUserMenu = this.$el.querySelector('.dropdown-menuuser');
if (dropdownUserMenu && this.selectedUserIndex !== -1) {
const item = dropdownUserMenu.querySelector('.dropdown-item-activeuser') || dropdownUserMenu.children[0];
item.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
},
selectUserOptions(option) {
this.showUserDropdown=false;
this.selectedUserIndex=-1;
this.selectUserOption=option.text;
this.searchUerText=option.text; //
this.selectedUser=option.value;
},
/**********************发布人结束***************************************/
onSearch(value) {
if(value!=''){
this.$emit('allSearch', value,0);
}else{
this.$emit('searchfunc');
}
},
onInput(value) {
// if(value!=''){
// this.$emit('allSearch', value,0);
// }else{
// this.$emit('searchfunc');
// }
},
onClear() {
document.title = '知识门户'
},
showSearchType(){
this.typeShow = true;
},
showSearchDetail() {
this.show = true
},
onCell(event, item, index, checkbox){
},
reset() {
this.title = ''
this.from = ''
this.startDateTitle = ''
this.endDateTitle = '';
// this.show = false;
this.rest = true;
this.creater='';
this.knwlName='';
this.knwlTag='';
this.filterSetting.cardName = "";
this.filterSetting.publishTime = "";
this.filterSetting.publishUser = "";
this.filterSetting.selectedDep = "";
this.filterSetting.selectedUser = "";
this.searchText = "";
this.searchUerText = "";
this.filterSetting.tags = encodeURIComponent(JSON.stringify([]));
this.filterSetting.schemaMetaData = encodeURIComponent(JSON.stringify({
'01': [],
'2': []
}));
this.$emit('searchfunc',0);
},
cancelDetail(){
this.show = false;
},
onDetailSearch() {
// -
let tags = [];
if (this.knwlTag != '') {
tags[0] = this.knwlTag;
}
let publicTime = {
"startPublishTime":this.startDateTitle,
"endPublishTime":this.endDateTitle
}
this.filterSetting.cardName = encodeURIComponent(this.knwlName);
this.filterSetting.publishTime = JSON.stringify(publicTime);
this.filterSetting.publishUser = this.selectedUser;
this.filterSetting.tags = encodeURIComponent(JSON.stringify(tags));
//
this.filterSetting.departId = this.selectedDep;
this.show = false
this.$emit('searchfunc',0);
},
cancelStartDate() {
this.startDateTitle = '';
const now = new Date();
let endY = new Date(now.setDate(now.getDate() - 365*10));
this.endMinDate = endY;
this.startDatePopup = false
},
confirmStartDate(val) {
this.startDateTitle = val.getFullYear() + '-' + (val.getMonth() + 1) + '-' + val.getDate();
this.endMinDate = val;
this.startDatePopup = false
},
cancelEndDate() {
this.endDateTitle = ''
this.endDatePopup = false
},
confirmEndDate(val) {
this.endDateTitle = val.getFullYear() + '-' + (val.getMonth() + 1) + '-' + val.getDate();
if(this.startDateTitle==''){
this.startMaxDate=new Date(this.endDateTitle );
}
this.endDatePopup = false
},
getSchema(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_search_schema_attr_list_json"
},
}).then(function (r){
if (r.result == "error") {
} else{
let tmp = r.data;
let tmpSchemaList = [];
for(let key in tmp){
let tmpV = tmp[key];
let attrl = tmpV['attrList'];
attrl.forEach((ob, index) => {
ob.active = false;
})
if(tmpV.showType==2){
tmpV.schemaId = key;
}
tmpSchemaList.push(tmp[key]);
}
that.schemaList = tmpSchemaList;
}
});
},
schemaSearch(){
this.typeShow = false;
// -
let newschemaMetaData01=[];
let schemaMetaData2=[];
for(let k=0;k<this.schemaList.length;k++){
let obj = this.schemaList[k];
if(obj.showType==2){
let val = obj.value?obj.value:'';
if(obj.isNullable==0&&val.trim()==''){
continue;
}
schemaMetaData2[schemaMetaData2.length] = {
metaValue: val.trim(),
schemaId: obj.schemaId
};
}else{
let attrList = obj.attrList;
let activeL = 0;
for(let j=0;j<attrList.length;j++){
let ob = attrList[j];
if(ob.active){
activeL++;
newschemaMetaData01.push({
attrId:ob.id,
schemaId:ob.schemaId
})
}
}
}
}
let schemaMetaData ={
'01': newschemaMetaData01, //
'2': schemaMetaData2
}
this.filterSetting.schemaMetaData = encodeURIComponent(JSON.stringify(schemaMetaData));
this.onDetailSearch();
},
resetSchema(){
for(let k=0;k<this.schemaList.length;k++){
let obj = this.schemaList[k];
if(obj.showType==2){
if( obj.value){
obj.value = "";
}
}else{
let attrList = obj.attrList;
attrList.forEach((ob, index) => {
ob.active = false;
})
}
}
},
cancelSchema(){
this.typeShow = false;
this.resetSchema();
},
clearData(itemTmp){
itemTmp.attrList.forEach((ob, index) => {
ob.active = false;
})
},
onClassify(el,itemTmp) {
if(!el.active){
if(itemTmp.showType==1){//
itemTmp.attrList.forEach((ob, index) => {
ob.active = false;
})
}
}
el.active = !el.active;
},
/*****************************选择组织*********************************/
//
getDeptment(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_search_getdeptment_list_json"
},
}).then(function (r){
if (r.result == "error") {
} else{
let tmp = r.data.data;
for(var i=0;i<tmp.length;i++){
that.options.push({ text: tmp[i].text, value: tmp[i].value});
}
}
});
},
//
getUserInfo(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_search_getuser_list_json"
},
}).then(function (r){
if (r.result == "error") {
} else{
let tmp = r.data.data;
for(var i=0;i<tmp.length;i++){
that.useroptions.push({ text: tmp[i].text, value: tmp[i].value});
}
}
});
}
},
watch: {
},
mounted(){
const now = new Date();
let endY = new Date(now.setDate(now.getDate() - 365*10));
this.endMinDate = endY;
this.getSchema();
this.getDeptment();
this.getUserInfo();
}
}
</script>
<style scoped>
.search .van-popup--right {
transform: translate3d(0, 0, 0);
top: 0;
bottom: 0;
}
.search-cell {
position: relative;
}
.search-cell .van-cell {
color: #707070;
font-size: 13px;
}
.footer {
padding: 10px ;
text-align: center;
}
</style>
<style>
.search-cell .van-field__control {
padding: 0 5px;
font-size: 12px;
border-radius: 2px;
color: #707070;
-webkit-appearance: none;
border: 0.33px solid #e9e9e9 !important;
}
.dimension {
height: 100%;
}
.dimension .content {
border-top: 0.33px solid #e9e9e9;
height: calc(100% - 105px);
overflow-y: auto;
}
.dimension .content .item {
padding: 0 12px;
background: #fff;
}
.dimension .content .item .checkbox {
width: 16px;
position: absolute;
top: 4px;
right: 20px;
}
.dimension .content .divide {
background: #e9e9e9;
width: 100%;
height: 12px;
}
.dimension .content .van-cell {
padding: 8px 0;
border-bottom: 1px solid #efefef;
}
.dimension .content .van-cell:last-child {
/*border-bottom: 0;*/
}
.dimension .content .van-cell .awsui-iconfont {
margin-right: 8px;
}
.dimension .content .van-cell .default {
color: #CCCCCC;
}
.treeDimension-noPerm,.treeHotspot-noPerm{
color: #CCCCCC;
}
.treeDimension,.treeHotspot{
color: #03A76B;
}
.treeHotspot {
color:#f3b731 !important;
}
.list li {
float: left;
padding: 12px 0 4px;
width: 100%;
position: relative;
border-bottom: 0.33px solid #e9e9e9;
}
.list li:not(:last-child) {
border-bottom: 0.33px solid #e9e9e9;
}
.list li .title, .tag .title {
font-size: 14px;
padding: 0;
background: none;
width: 100%;
line-height: 19px;
color: #646566;
}
.list li .con, .tag .con {
padding: 12px 0 0;
position: relative;
float: left;
width: 100%;
}
.list li .con .classify, .tag .con .classify {
width: calc(100% / 3 - 16px - 10px);
height: 30px;
line-height: 16px;
padding: 5px 8px;
margin-right: 10px;
margin-bottom: 8px;
border-radius: 2px;
background: #F5F5F5;
float: left;
display: flex;
align-items: center;
text-align: center;
cursor: pointer;
}
.tag .con .classify {
height: auto;
line-height: 20px;
}
.list li .con .classify .name, .tag .con .classify .name {
float: left;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
width: 100%;
cursor: pointer;
}
.con .classActive {
background: #E1EFFF !important;
color: #1B6EC9;
}
.list li .con .classify:last-child {
margin-right: 0;
}
.classify .name{
font-size: 13px;
}
.required:before{
content: '*';
color: red;
}
.schema_head,.detail_head{
text-align: center;
font-size: 14px;
border-bottom: 0.33px solid #e9e9e9;
height: 31px;
padding: 10px;
padding-bottom: 0px;
}
.schema_cancel,.detail_cancel{
float: left;
color:#646566 ;
}
.schema_rest,.detail_rest{
float: right;
color: #1b6ec9;
}
.schema_footer{
position: absolute;
bottom: 30px;
width: calc(100% - 20px);
text-align: center;
}
.van-search__content{
padding-right: 16px;
}
.selected-value{
display: none;
}
/*********************发布部门*******************************/
.dropdown-menu {
/*position: absolute;*/
/*top: 100%;*/
left: 0;
right: 0;
z-index: 1000;
background-color: #fff;
border: 1px solid #ccc;
max-height: 200px;
overflow-y: auto;
}
.dropdown-item {
padding: 8px;
cursor: pointer;
}
.dropdown-item-active {
background-color: #eee;
}
.selected-value {
font-size: 14px;
color: #333;
margin-top: 10px;
}
/*****************发布人开始****************/
.dropdown-menuuser {
/*position: absolute;*/
/*top: 100%;*/
left: 0;
right: 0;
z-index: 1000;
background-color: #fff;
border: 1px solid #ccc;
max-height: 200px;
overflow-y: auto;
}
.dropdown-itemuser {
padding: 8px;
cursor: pointer;
}
.dropdown-item-activeuser {
background-color: #eee;
}
.selected-valueuser {
font-size: 14px;
color: #333;
margin-top: 10px;
}
/*****************发布人结束****************/
</style>

View File

@ -0,0 +1,72 @@
<template>
<van-tabbar v-model="active" @change="changeTabbar" active-color="#3296fa" inactive-color="#333">
<van-tabbar-item v-for="(item,index) in tabbars" :key="index" :to="(item.path)">
<div class="van-tabbar-item__icon">
<i class="awsui-iconfont" v-html="item.icon"></i>
</div>
<div class="van-tabbar-item__text">{{item.title}}</div>
</van-tabbar-item>
</van-tabbar>
</template>
<script>
export default {
name: 'tabbar',
data () {
return {
active: 0,
tabbars: [
{
path: '/',
name: 'knwlhome',
title: '首页',
icon: '&#xe862;'
},
{
path: '/knwldir',
name: 'knwldir',
title: '目录',
icon: '&#59223;'
},
{
path: '/myknwl',
name: 'myknwl',
title: '我的',
icon: '&#58939;'
}
]
}
},
methods: {
changeTabbar(){
localStorage.setItem("activeTab",'');
}
},
created () {
if (this.$route.name === 'knwlhome') {
this.active = 0
} else if (this.$route.name === 'knwldir') {
this.active = 1
} else if (this.$route.name === 'myknwl') {
this.active = 2
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
.van-tabbar-item {
text-align: center;
color: #333333;
font-size: 13px;
}
.van-tabbar-item__icon {
margin-top: -3px;
}
.van-tabbar--fixed {
border-top: 0.33px solid #e9e9e9;
}
</style>

View File

@ -0,0 +1,35 @@
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import Vant from 'vant'
import 'vant/lib/index.css'
import axios from 'axios'
import router from './router'
import store from './store'
Vue.use(Vant)
router.beforeEach((to, from, next) => { //修改title方法
if (to.meta.title) {
document.title = to.meta.title
}
next()
})
// 设置浏览器标题
Vue.directive('title', {
inserted: function (el, binding) {
document.title = el.dataset.title
}
})
Vue.prototype.$ajax = axios
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
render: h => {
return h(App);
},
}).$mount('#app')

View File

@ -0,0 +1,172 @@
<template>
<div class="borrow-apply">
<van-form>
<van-field
class="background"
v-model="applyName"
required
label="申请人"
placeholder="请输入申请人"
:rules="[{ required: true, message: '申请人不能为空' }]"
/>
<van-field
class="background"
v-model="knwlName"
label="知识名称"
placeholder="请输入知识名称"
/>
<van-field
class="background"
v-model="knwlPath"
label="知识路径"
placeholder=""
/>
<van-field
class="background"
v-model="admin"
label="管理员"
placeholder=""
/>
<van-field-select
class="border"
label="借阅控制"
required
placeholder="请选择"
v-model="control"
:columns="controlOption"
/>
<van-field
v-show="showReadTimes"
class="border"
v-model="readTimes"
required
label="阅读次数"
placeholder=""
:rules="[{ required: true, message: '不能为空' }]"
/>
<div v-show="showDate">
<van-field-date
class="border"
v-model="startDate"
:minDate="minDate"
:maxDate="maxDate"
type="date"
required
label="开始日期"
placeholder="请选择日期"
/>
<van-field-date
class="border"
v-model="endDate"
required
label="结束日期"
type="date"
placeholder="请选择日期"
/>
</div>
<van-field
class="border"
v-model="remarks"
required
:autosize="{ maxHeight: 100, minHeight: 100 }"
type="textarea"
label="备注"
placeholder=""
/>
<div class="footer">
<!--<van-button round block type="info" native-type="submit">
提交
</van-button>-->
<van-button type="danger">作废</van-button>
<van-button plain type="info" @click="onSave">保存</van-button>
<van-button type="info" @click="onHandle">办理</van-button>
<van-button type="default">更多</van-button>
</div>
</van-form>
</div>
</template>
<script>
import vanFieldSelect from '@/components/fieldSelect'
import vanFieldDate from '@/components/fieldDate'
export default {
name: 'borrow-approve',
components: {
vanFieldSelect,
vanFieldDate
},
data () {
return {
applyName: '司马懿',
knwlName: 'AWS访问连接池参数调整',
knwlPath: '知识目录 > 公司 > 重要文件',
admin: '张飞',
control: '阅读次数',
controlOption: ['阅读次数', '有效日期'],
showReadTimes: true,
readTimes: '3次',
showDate: false,
startDate: '',
endDate: '',
minDate: new Date(2020, 0, 1),
maxDate: new Date(2025, 10, 1),
remarks: '',
id: 1
}
},
methods: {
onSave (values) {
console.log('submit', values)
},
onHandle () {
this.$router.push({
name: 'borrow-approve',
params: {
id: this.id
}
})
}
},
watch: {
control: function () {
if (this.control === '阅读次数') {
this.showReadTimes = true
this.showDate = false
} else {
this.showReadTimes = false
this.showDate = true
}
}
}
}
</script>
<style scoped>
.borrow-apply {
height: 100%;
}
.footer {
padding: 12px;
position: fixed;
border-top: 0.33px solid #e9e9e9;
left: 0;
right: 0;
bottom: 0;
background: #fff;
z-index: 1;
}
.footer .van-button {
height: 38px;
line-height: 38px;
width: calc(100% / 4 - 12px);
margin-right: 12px;
border-radius: 2px;
padding: 0 !important;
}
.footer .van-button:last-child {
margin-right: 0;
}
</style>

View File

@ -0,0 +1,248 @@
<template>
<div class="borrow-approve">
<van-form @submit="onSubmit" style="padding:0 16px;">
<van-field
v-model="applyName"
label="申请人"
/>
<van-field
v-model="knwlName"
label="知识名称"
/>
<van-field
v-model="knwlPath"
label="知识路径"
/>
<van-field
v-model="admin"
label="管理员"
/>
<van-field
v-model="control"
label="借阅控制"
/>
<van-field
v-model="startDate"
label="开始日期"
/>
<van-field
v-model="endDate"
label="结束日期"
/>
<van-field
v-model="remarks"
type="textarea"
label="备注"
:autosize="{ maxHeight: 30, minHeight: 30 }"
/>
</van-form>
<div class="divide"></div>
<div class="steps" :class="recordList.length==1?'center':''">
<span class="title" style="margin-bottom: 15px;">审批记录</span>
<div class="items" v-for="(item,index) in recordList" :key="index">
<span class="left">
<label class="head">
<img :src="item.headImg" alt="">
</label>
<label class="name">{{item.name}}</label>
</span>
<span class="right">
<label class="title" :style="index==recordList.length-1?'padding:0':''">{{item.title}}</label>
<label class="date">{{item.date}}</label>
<label class="circle" :class="{'active':currentActive==index}"></label>
<label class="line" :style="index==recordList.length-1?'height:30px;':''"></label>
</span>
</div>
</div>
<div class="footer">
<van-button type="danger">不同意</van-button>
<van-button type="info">同意</van-button>
<van-button type="default">更多</van-button>
</div>
</div>
</template>
<script>
import vanFieldSelect from '@/components/fieldSelect'
import vanFieldDate from '@/components/fieldDate'
export default {
name: 'borrow-approve',
components: {
vanFieldSelect,
vanFieldDate
},
data () {
return {
applyName: '司马懿',
knwlName: 'AWS访问连接池参数调整',
knwlPath: '知识目录 > 公司 > 重要文件',
admin: '张飞',
control: '有效日期',
showDate: true,
startDate: '2020-05-01',
endDate: '2020-05-30',
remarks: '申请借阅',
currentActive: 1,
recordList: [
{
headImg: require('../assets/header.png'),
name: '司马懿',
title: '借阅申请 (提交)',
date: '2019-12-10 08:22:23'
},
{
headImg: require('../assets/logo.png'),
name: '司马懿',
title: '借阅审批 (正在办理)',
date: '2019-12-10 09:32:17'
}
]
}
},
methods: {
onSubmit (values) {
console.log('submit', values)
}
}
}
</script>
<style scoped>
.borrow-approve {
height: 100%;
overflow-y: auto;
}
.borrow-approve .van-form .van-cell {
border-bottom: 1px solid #EFEFEF;
padding: 10px 0;
}
.borrow-approve .van-form .van-cell:last-child {
border-bottom: none;
}
.footer {
padding: 12px;
position: fixed;
border-top: 0.33px solid #e9e9e9;
left: 0;
right: 0;
bottom: 0;
background: #fff;
}
.footer .van-button {
height: 38px;
line-height: 38px;
width: calc(100% / 3 - 12px);
margin-right: 12px;
border-radius: 2px;
padding: 0 !important;
}
.footer .van-button:last-child {
margin-right: 0;
}
.borrow-approve .steps {
position: relative;
overflow-y: auto;
padding: 16px 14px 0;
margin-bottom: 63px;
}
.borrow-approve .center {
display: flex;
justify-content: center;
align-items: center;
}
.borrow-approve .steps .items {
color: #333;
}
/*.borrow-approve .steps .active {
color: #3CA772;
background-color: #3CA772;
}*/
.borrow-approve .steps .left {
width: 46px;
font-size: 14px;
display: inline-block;
vertical-align: top;
text-align: center;
}
.borrow-approve .steps .left .head {
width: 44px;
height: 44px;
border-radius: 50%;
border: 1px solid #e0e0e0;
position: relative;
}
.borrow-approve .steps .left .head img {
max-width: 70%;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background-color: white;
border-radius: 50%;
}
.borrow-approve .steps .left .name {
line-height: 20px;
font-size: 12px;
}
.borrow-approve .steps .right {
width: calc(100% - 90px);
padding: 10px 0 40px 40px;
position: relative;
display: inline-block;
}
.borrow-approve .steps .title {
font-size: 14px;
display: inline-block;
vertical-align: top;
min-height: 20px;
line-height: 20px;
font-weight: bold;
width: 100%;
}
.borrow-approve .steps .date {
color: #666;
line-height: 20px;
}
.borrow-approve .steps .items .circle, .borrow-approve .steps .active .circle {
position: absolute;
top: 15px;
left: 11px;
background-color: #3CA772;
width: 11px;
height: 11px;
border-radius: 50%;
}
.borrow-approve .steps .active .circle {
background-color: #3CA772;
}
.borrow-approve .steps .items .line {
position: absolute;
top: 25px;
left: 16px;
width: 1px;
height: 100%;
background: #e0e0e0;
}
</style>

View File

@ -0,0 +1,560 @@
<template>
<div class="detail">
<div class="content">
<div class="items">
<span class="top">{{title}}</span>
<div>
<span class="desTitle">{{desTitle}}</span>
<span class="description">{{description}}</span>
</div>
</div>
<div class="divide"></div>
<div class="items" style="padding:0;">
<div class="title">知识附件</div>
<van-swipe class="my-swipe" :show-indicators="false">
<van-swipe-item v-for="(el,index) in resultList" :key="index">
<ul class="list">
<li v-for="(item,index) in el" :key="index" :style="index%2!=0?'border-bottom:0':''">
<div class="icon">
<i class="awsui-iconfont" v-html="item.icon"></i>
</div>
<div class="left">
<div class="title">
{{item.file}}
</div>
<div class="description">
<label>下载次数
<font>{{item.times}}</font>
</label>
<label class="line">|</label>
<label>
<font>{{item.size}}</font>
</label>
</div>
</div>
<div class="right">
<span class="name">{{item.name}}</span>
<span class="time">{{item.date}}</span>
</div>
</li>
<div class="li-more" :style="el.length==1?'display:block':''">
<div v-if="list.length==5" class="more">
更多
<i class="awsui-iconfont" style="font-size: 13px;">&#xe80a;</i>
</div>
</div>
</ul>
</van-swipe-item>
</van-swipe>
</div>
<div class="divide"></div>
<div class="items" style="padding:0;">
<ul class="list">
<li style="border-bottom:0;">
<div class="icon" style="width:40px; height: 40px;">
<img :src="userHeadImg" alt="">
</div>
<div class="left">
<div class="title">
{{userName}}
</div>
<div class="description">
{{department}}
</div>
</div>
<div class="right">
<span class="name" style="color:#4A90E2;">{{evaluate.evaluateNum}}人评价</span>
<span class="time" style="color:#4A90E2;">{{browseNum}}人浏览</span>
</div>
</li>
<div class="center">
<div class="left">
<span class="score">{{score}}</span>
<van-rate class="start" :size="10" void-icon="star" void-color="#ddd" v-model="start"/>
</div>
<div class="right">
<div class="item">
<div class="start">
<van-rate :size="6" v-model="value" void-icon="star" void-color="#ddd"/>
</div>
<van-progress class="progress" color="#ffd21e" pivot-text="" :percentage="50"/>
<div class="percentage">50%</div>
</div>
<div class="item">
<div class="start">
<van-rate :size="6" :count="4" v-model="value" void-icon="star" void-color="#ddd"/>
</div>
<van-progress class="progress" color="#ffd21e" pivot-text="" :percentage="40"/>
<div class="percentage">40%</div>
</div>
<div class="item">
<div class="start">
<van-rate :size="6" :count="3" v-model="value" void-icon="star" void-color="#ddd"/>
</div>
<van-progress class="progress" color="#ffd21e" pivot-text="" :percentage="20"/>
<div class="percentage">20%</div>
</div>
<div class="item">
<div class="start">
<van-rate :size="6" :count="2" v-model="value" void-icon="star" void-color="#ddd"/>
</div>
<van-progress class="progress" color="#ffd21e" pivot-text="" :percentage="10"/>
<div class="percentage">10%</div>
</div>
<div class="item">
<div class="start">
<van-rate :size="6" :count="1" v-model="value" void-icon="star" void-color="#ddd"/>
</div>
<van-progress class="progress" color="#ffd21e" pivot-text="" :percentage="0"/>
<div class="percentage">0%</div>
</div>
</div>
</div>
<div class="bottom">
您的评价
<van-rate :size="16" void-icon="star" void-color="#ddd" v-model="start"/>
</div>
</ul>
</div>
<div class="items" style="padding:0;">
<ul class="list evaluate">
<li v-for="(item,index) in evaluate.list" :key="index">
<div class="icon" style="width:45px;">
<img :src="item.headImg" alt="">
</div>
<div class="left">
<span class="title">
{{item.name}}
</span>
<span class="date">
{{item.date}}
</span>
<div class="description">
{{item.description}}
</div>
</div>
</li>
</ul>
</div>
</div>
<div class="footer">
<span class="headImg"><img :src="userHeadImg" alt=""></span>
<van-field
class="field border"
v-model="message"
center
placeholder="请输入"
>
<template #button>
<van-button size="small" type="info">提交</van-button>
</template>
</van-field>
</div>
</div>
</template>
<script>
export default {
name: 'know-detail',
data() {
return {
value: 0,
title: 'AWS访问连接池参数调整',
desTitle: '这是段落描述标题',
description: '这里是正文内容的描述信息这里是正文内容的描述信息这里是正文内容的描述信息这里是正文内容的描述信息这里是正文内容的描述信息',
list: [
{
id: 'know1',
icon: '&#xe65a;',
file: '这里是文件名称.ppt',
name: '司马懿',
date: '2017-10-23 10:59',
times: '23',
size: '9.24k'
},
{
id: 'know2',
icon: '&#xe65a;',
file: '这里是文件名称.ppt',
name: '司马懿',
date: '2017-10-23 10:59',
times: '23',
size: '9.24k'
},
{
id: 'know3',
icon: '&#xe65a;',
file: '这里是文件名称.ppt',
name: '司马懿',
date: '2017-10-23 10:59',
times: '23',
size: '9.24k'
},
{
id: 'know4',
icon: '&#xe65a;',
file: '这里是文件名称.ppt',
name: '司马懿',
date: '2017-10-23 10:59',
times: '23',
size: '9.24k'
},
{
id: 'know5',
icon: '&#xe65a;',
file: '这里是文件名称.ppt',
name: '司马懿',
date: '2017-10-23 10:59',
times: '23',
size: '9.24k'
}
],
resultList: [],
userHeadImg: require('../assets/header.png'),
department: '研发中心部',
userName: '李善诗',
score: '4.2', //
start: 4, // number
browseNum: '320', //
evaluate: {
evaluateNum: '9238', //
list: [ //
{
headImg: require('../assets/header.png'),
name: '司马懿',
date: '2019-12-10 08:22:23',
description: '这里是评价内容描述这里是评价内容描述这里是评价内容描述这里是评价内容描述'
},
{
headImg: require('../assets/header.png'),
name: '司马懿',
date: '2019-12-10 08:22:23',
description: '这里是评价内容描述这里是评价内容描述这里是评价内容描述这里是评价内容描述'
},
{
headImg: require('../assets/header.png'),
name: '司马懿',
date: '2019-12-10 08:22:23',
description: '这里是评价内容描述这里是评价内容描述这里是评价内容描述这里是评价内容描述'
},
{
headImg: require('../assets/header.png'),
name: '司马懿',
date: '2019-12-10 08:22:23',
description: '这里是评价内容描述这里是评价内容描述这里是评价内容描述这里是评价内容描述'
}
]
},
message: ''
}
},
methods: {
getItemResult() {
var chunk = 2 //2
var list = []
if (this.list.length > 5) {
list = this.list.slice(0, 5)
} else {
list = this.list
}
for (var i = 0, len = list.length; i < len; i += chunk) {
this.resultList.push(list.slice(i, i + chunk))
}
}
},
created() {
this.getItemResult()
console.log(this.$route.params.id)
}
}
</script>
<style scoped>
.detail {
height: 100%;
}
.detail .content {
border-top: 1px solid #e9e9e9;
color: #666;
height: calc(100% - 51px);
overflow-y: auto;
width: 100%;
}
.items {
padding: 12px;
}
.items span {
display: inline-block;
}
.top {
font-size: 16px;
color: #666;
font-weight: bold;
line-height: 22px;
padding-bottom: 10px;
border-bottom: 1px solid #e9e9e9;
width: 100%;
}
.desTitle {
line-height: 18px;
padding: 12px 0 5px;
width: 100%;
color: #666;
}
.description {
line-height: 16px;
color: #999;
width: 100%;
}
.title {
padding-bottom: 6px;
line-height: 16px;
border-bottom: 1px solid #e9e9e9;
padding: 12px;
}
.list {
padding: 0 12px;
float: left;
width: calc(100% - 24px);
}
.list span, .list label {
display: inline-block;
}
.list li {
float: left;
padding: 11px 0;
width: 100%;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
.list li:not(:last-child) {
border-bottom: 1px solid #e9e9e9;
}
.list li .icon {
float: left;
padding-right: 10px;
}
.list li .icon .awsui-iconfont {
font-size: 35px;
color: #FFB800;
}
.list li .left {
width: calc(100% - 110px);
float: left;
}
.list li .left .title, .list li .right .name {
font-size: 13px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
color: #333;
line-height: 18px;
padding: 0 0 6px;
border: 0;
width: 100%;
}
.list li .right .name {
font-size: 12px;
padding: 0;
}
.list li .left .description, .list li .right .time {
color: #999999;
line-height: 15px;
}
.list li .left .description .line {
display: inline-block;
margin: 0 6px;
}
.list li .right {
width: 110px;
text-align: right;
float: right;
}
.list .li-more {
padding: 0;
border: none;
height: 67px;
line-height: 67px;
width: 100%;
display: none;
}
.list .li-more .more {
color: #999;
line-height: 20px;
font-size: 13px;
cursor: pointer;
display: inline-block;
text-align: center;
width: 100%;
letter-spacing: 1px;
}
.list .center {
float: left;
background: #f9f9f9;
padding: 10px;
width: calc(100% - 20px);
}
.list .center .left {
width: 66px;
text-align: center;
margin-right: 2px;
float: left;
}
.list .center .left .score {
font-size: 40px;
font-weight: bold;
color: #333;
vertical-align: top;
line-height: 30px;
padding-bottom: 10px;
}
.list .center .right {
float: left;
width: calc(100% - 68px);
}
.list .center .right .item {
float: left;
line-height: 10px;
width: 100%;
display: flex;
align-items: center;
}
.list .center .right .item .start {
width: 48px;
margin-right: 10px;
float: left;
text-align: right;
}
.list .center .right .item .progress {
width: calc(100% - 80px);
float: left;
margin-right: 5px;
}
.list .center .right .item .percentage {
width: 27px;
font-size: 10px;
float: left;
color: #999;
}
.list .bottom {
float: left;
line-height: 16px;
padding: 10px 0;
display: flex;
align-items: center;
width: 100%;
}
.evaluate li .left {
width: 100%;
}
.evaluate li .left .title {
width: auto;
padding: 0;
}
.evaluate li .date {
color: #999;
float: right;
}
.evaluate li .description {
float: left;
}
.footer {
position: fixed;
border-top: 1px solid #e9e9e9;
padding-left: 12px;
left: 0;
right: 0;
bottom: 0;
background: #fff;
z-index: 1;
display: flex;
align-items: center;
}
.footer .headImg {
width: 30px;
display: inline-block;
}
.footer .field {
width: calc(100% - 30px);
}
.footer .van-button {
height: 28px;
line-height: 28px;
border-radius: 2px;
padding: 0 !important;
}
</style>
<style>
.my-swipe .van-swipe-item {
height: 134px;
}
.start .van-rate__item:not(:last-child) {
padding-right: 2px;
}
.list .center .right .item .start .van-rate__item:not(:last-child) {
padding-right: 4px;
}
.footer .field .van-field__control{
padding:0 7px;
font-size: 12px;
position: relative;
padding-left: 22px;
}
.footer .field::before {
position: absolute;
top: 50%;
left: 22px;
transform: translateY(-50%);
font-family: "awsui-iconfont";
content: "\e636";
background: none;
font-size: 14px;
z-index: 10;
height: 24px;
color:#999;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,378 @@
<template>
<div class="dimension">
<van-search v-model="value" placeholder="请输入知识目录相关文件..."/>
<div style="height: 20px;font-size: 13px;color: #1b6ec9;padding: 0px 12px;">
<span style="float: left;" @click="back()">返回</span>
<span style="float: right;display: inline-block;" @click="clear()">清空</span>
<span style="float: right;display: inline-block;margin-right: 15px;" @click="getValue()">确定</span>
</div>
<div class="content">
<div class="top" v-show="type=='list'">
<span v-for="(item,index) in tablist" :key="index" >
<span class="tabname" :style="(index<(tablist.length-1)?'color: #378DEC;':'color: #333;')" @click="(index<(tablist.length-1)?backtop(item.id,item.name):'')">{{item.name}}</span>
<span v-show="(index<(tablist.length-1))">{{tabicon}} </span>
</span>
</div>
<div class="item" v-if="listSize> 0">
<van-checkbox-group v-model="result">
<van-cell-group>
<span v-for="(item, index) in list">
<van-cell
v-if="item.open!=undefined"
is-link
clickable
:key="index"
@click="onCell($event,item,index,'checkboxes')"
>
<i class="awsui-iconfont" :class="item.iconCls">{{item.iconCls.indexOf('treeDimension')>-1?'&#58913;':'&#xeac5;'}}</i>
{{item.name}}
<van-checkbox :disabled="item.disabled!=undefined" class="checkbox" label-disabled v-show="!item.nocheck" :id="item.id" shape="square" :publishPerm="item.publishPerm" :name="item.id" ref="checkboxes"
icon-size="16px" >
</van-checkbox>
</van-cell>
<van-cell
v-else
clickable
:key="index"
@click="onCell($event,item,index,'checkboxes')"
>
<i class="awsui-iconfont" :class="item.iconCls">{{item.iconCls.indexOf('treeDimension')>-1?'&#58913;':'&#xeac5;'}}</i>
{{item.name}}
<van-checkbox :disabled="item.disabled!=undefined" class="checkbox rightchk" label-disabled v-show="!item.nocheck" :id="item.id" shape="square" :publishPerm="item.publishPerm" :name="item.id" ref="checkboxes"
icon-size="16px" >
</van-checkbox>
</van-cell>
</span>
</van-cell-group>
</van-checkbox-group>
</div>
<div v-else>
<div class="con">
<div class="img">
<img src="../assets/no_content.png" alt="" style="width: 125px;">
</div>
<div class="text">暂无数据</div>
</div>
</div>
</div>
</div>
</template>
<script>
import awsuiAxios from "../awsuiAxios";
export default {
name: 'know-dimension',
data() {
return {
initcheckFlag:false,
value: '',
knowDir: '知识目录',
tabicon:">",
list: [
],
tablist: [{
name:"知识目录",
id:"-1"
}
],
listSize:0,
id: '',
type:"list",
result: [],
currentParentId:"",
currentParentName:"知识目录",
}
},
props:{
publishDimensionData:{
type:Object,
default(){
return {};
}
}
},
methods: {
checkclick(item,state){
if(state=='checked'){
if(item.iconCls.indexOf('noPerm')>-1){
for(let itm of this.list){
if(itm.id!=item.id){
itm.disabled = true;
}else{
itm.disabled = undefined;
}
}
}else{
for(let itm of this.list){
if(itm.iconCls.indexOf('noPerm')>-1){
itm.disabled = true;
}else{
itm.disabled = undefined;
}
}
}
}else{
for(let itm of this.list){
itm.disabled = undefined;
}
}
},
onCell(event, item, index, checkbox) {
let cId = document.getElementById(item.id)
if (cId) {
this.currentParentId = item.id;
this.currentParentName = item.name;
if (event.target.className.indexOf("van-cell__")>-1) {
if(item.open!=undefined){
this.getDimensionTree();
}
} else {
if(item.disabled==undefined){
this.toggle(index, checkbox,item);
}
}
}
},
toggle(index, checkbox,item) {
this.$refs[checkbox][index].toggle()
let dimenId =item.id;
if(!this.$refs[checkbox][index].checked){
if(!this.publishDimensionData.hasOwnProperty(dimenId)){
this.publishDimensionData[dimenId]=item
}
this.checkclick(item,'checked');
}else{
if(this.publishDimensionData.hasOwnProperty(dimenId)){
delete this.publishDimensionData[dimenId];
}
if(Object.keys(this.publishDimensionData).length==0){
this.checkclick(item,'nochecked');
}
} ;
this.id = this.$refs[checkbox][index].$attrs.id
},
getValue(){
this.$emit('dimensionBack',this.publishDimensionData,"ok");
},
clear(){
if(this.$refs.checkboxes){
this.$refs.checkboxes.forEach(el => {
el.toggle(false);
});
this.publishDimensionData = {};
this.result = [];
}
for(let itm of this.list){
itm.disabled = undefined;
}
// this.$emit('dimensionBack');
},
back(){
this.$emit('dimensionBack',this.publishDimensionData,"back");
},
getDimensionTree(id,type){
let parentId= this.currentParentId;
if(type=='back'){
parentId=id=="-1"?"":id;
}
let that = this;
//
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_me_publish_dimension_tree_json",
parentId:parentId
},
}).then(function (r) {
let keys = Object.keys(that.publishDimensionData);
if(keys==0){
that.clear();
}
let dimensionJA = r;
that.list = dimensionJA;
that.listSize = that.list.length;
let parentid = that.currentParentId;
if(parentid==''){
that.tablist =[{
name:"知识目录",
id:"-1"
}
]
}else{
let tmpd = that.tablist;
let indx = 0;
let has = false;
for(let n=0;n<tmpd.length;n++){
if( tmpd[n]['id']==parentid){
indx =n;
has = true;
break;
}
}
if(has){
that.tablist=that.tablist.slice(0,indx+1);
}else{
that.tablist.push({
name:that.currentParentName,
id:parentid
})
}
}
});
},
search(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_mobile_center_dimension_search",
key:this.value
},
}).then(function (r){
if (r.result == "error") {
alert(r.msg);
} else{
if(Object.keys(that.publishDimensionData).length==0){
that.clear();
}
that.list = r.data.dimensionJA;
}
});
},
backtop(id,name){
this.currentParentId = id;
this.currentParentName = name;
this.getDimensionTree(id,'back');
}
},
mounted() {
this.initcheckFlag = true;
this.$nextTick(() => {
var that = this
if (that.$route.params.id !== undefined) {
this.id = that.$route.params.id
}
this.result = Object.keys(that.publishDimensionData);
// that.list.forEach(el => {
// if (el.id === this.id) {
// this.result = [el.name]
// }
// })
})
},
watch:{
value(v) {
if(v!=''){
this.type='search';
this.search();
}else{
this.type='list';
this.getDimensionTree("-1","back");
}
}
},
created(){
this.getDimensionTree("-1","");
}
}
</script>
<style scoped>
.dimension {
height: 100%;
}
.dimension .content {
border-top: 0.33px solid #e9e9e9;
height: calc(100% - 105px);
overflow-y: auto;
}
.dimension .content .item {
padding: 0 12px;
background: #fff;
}
.dimension .content .item .checkbox {
width: 16px;
position: absolute;
top: 4px;
right: 20px;
}
.dimension .content .divide {
background: #e9e9e9;
width: 100%;
height: 12px;
}
.dimension .content .van-cell {
padding: 8px 0;
border-bottom: 1px solid #efefef;
}
.dimension .content .van-cell:last-child {
/*border-bottom: 0;*/
}
.dimension .content .van-cell .awsui-iconfont {
margin-right: 8px;
}
.dimension .content .van-cell .default {
color: #CCCCCC;
}
.top {
padding: 9px 12px 7px;
line-height: 18px;
border-bottom: 0.33px solid #e9e9e9;
font-size: 12px;
}
.top .tabname{
font-size: 14px;
}
.con {
position: absolute;
width: 100%;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
text-align: center;
}
.con .img {
width: 125px;
height: 125px;
margin: 0 auto;
}
.con .text {
color: #999;
line-height: 20px;
font-size: 13px;
width: 100%;
}
.treeDimension-noPerm,.treeHotspot-noPerm{
color: #CCCCCC;
}
.treeDimension,.treeHotspot{
color: #FABD01;
}
.treeHotspot {
color:#f3b731 !important;
}
.rightchk{
right: 40px !important;
}
</style>

View File

@ -0,0 +1,208 @@
<template>
<div class="knwlborrow">
<div style="padding: 3px 10px;width: 100%;background:#f2f3f5;z-index: 999">
<i style="font-size: 18px;color:#000" class="awsui-iconfont" @click="backHome">&#xe6fa;</i>
</div>
<div style="font-size: 13px;padding:10px;border-bottom: 1px solid #e8e8e8;">知识名称{{name}}</div>
<ul class="list" v-if="list.length>0" :style="heights">
<van-list
v-model="loading"
:finished="finished"
@load="downLoad"
finished-text="没有更多了"
loading-text="加载中..."
:offset="offset"
>
<li v-for="(item,index) in list" :key="index">
<div class="left">
<div class="title">{{item.logContent}}</div>
<div class="description">
<label>
{{item.accessUsername}}
</label>
<label v-if="item.cardContext!=''" class="line">|</label>
<label>
{{item.accessTime}}
</label>
</div>
</div>
</li>
</van-list>
</ul>
<div class="list" v-else>
<div class="con">
<div class="img">
<img src="../assets/no_content.png" alt="" style="width: 125px;">
</div>
<div class="text">暂无内容</div>
</div>
</div>
</div>
</template>
<script>
import awsuiAxios from "../awsuiAxios";
let searchTimeout;
export default {
name: 'knwlborrow',
data() {
return {
loading:false,
finished:false,
offset:10,
curPage:0,
heights:"",
showDialog: false,
id: 1,
name: '',
list: []
}
},
methods: {
backHome(){
window.history.back();
},
downLoad(){
this.getDimensionCard();
},
getDimensionCard(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_log_list",
cardId:this.$route.params.id,
curPage:this.curPage<=0?1:this.curPage+1,
rowsPerPage:10,
sortIndx:"accessTime",
sortDir:"down"
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
if(that.curPage==0){
that.list = r.data.data;
}else{
that.list =that.list.concat( r.data.data);
}
that.curPage = r.data.curPage;
let totalRecords = r.data.totalRecords;
if(that.curPage*10>=totalRecords){
that.finished = true;
}
}
});
}
},
created() {
this.name=this.$route.params.name;
this.heights ="height:"+(window.innerHeight-52)+"px";
this.getDimensionCard();
}
}
</script>
<style scoped>
.path_title{
color:#378DEC;
}
.knwlborrow {
height: 100%;
}
.top {
padding: 9px 12px 7px;
line-height: 18px;
border-bottom: 0.33px solid #e9e9e9;
font-size: 12px;
}
.list {
padding: 0 12px;
float: left;
height: calc(100% - 86px);
overflow-y: auto;
width: calc(100% - 24px);
}
.list span, .list label {
display: inline-block;
}
.list li {
float: left;
padding: 11px 0;
width: 100%;
position: relative;
border-bottom: 0.33px solid #e9e9e9;
}
.list li:not(:last-child) {
border-bottom: 0.33px solid #e9e9e9;
}
.list li .left {
width: calc(100% - 1px);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
float: left;
}
.list li .left .title {
font-size: 13px;
color: #333;
line-height: 18px;
margin-bottom: 4px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.list li .left .description {
color: #999999;
line-height: 15px;
font-size: 12px;
}
.list li .left .description .line {
display: inline-block;
margin: 0 8px;
color: #E8E8E8;
}
.list li .right {
width: 20px;
text-align: right;
float: right;
margin-top: 18px;
}
.list li .right .awsui-iconfont {
color: #a4a4a4;
}
.con {
position: absolute;
width: 100%;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
text-align: center;
}
.con .img {
width: 125px;
height: 125px;
margin: 0 auto;
}
.con .text {
color: #999;
line-height: 20px;
font-size: 13px;
width: 100%;
}
</style>

View File

@ -0,0 +1,156 @@
<template>
<div class="knwldir">
<van-search v-model="keyvalue" placeholder="请输入文件内容关键词"/>
<div class="content" :style="contentH">
<div class="item">
<van-cell v-for="(item,index) in dirs" :key="index" is-link
:to="{name:'sub-knwldir', params: {id:item.id,hasPerm:item.hasPerm}}">
<i v-if="item.iconCls.indexOf('treeDimension')>-1" class="awsui-iconfont" :style="item.hasPerm?'color:#FABD01;':'color:#c8c9cc;'" :class="item.iconCls">&#58913;</i>
<i v-else class="awsui-iconfont" :style="item.hasPerm?'color:#FABD01;':'color:#c8c9cc;'" :class="item.iconCls">&#xeac5;</i>
{{item.name}}
</van-cell>
</div>
<div v-show="!initLoad&&dirs.length==0">
<div class="con">
<div class="img">
<img src="../assets/no_content.png" alt="" style="width: 110px;">
</div>
<div class="text">暂无数据</div>
</div>
</div>
</div>
<tabbar/>
</div>
</template>
<script>
import tabbar from '@/components/tabbar.vue' //
import awsuiAxios from "../awsuiAxios";
export default {
name: 'knwldir',
components: {
tabbar
},
data() {
return {
initLoad:true,
keyvalue: '',
contentH:'',
dirs: [],
tmpdirs:[],
name: `<font color='#378DEC'>知识目录</font>` + ' > '
}
},
methods:{
getDimensionList(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_mobile_center_dimension_tree_json",
parentId:"",
isDimensionKnwlPage:false
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
that.$toast({message: r.data?r.data.desc:r.msg, overlay: true});
} else {
that.dirs = r.data.dimensionJA;
that.tmpdirs = r.data.dimensionJA;
}
that.initLoad = false;
});
},
searchDirName(){
let that = this;
if(that.keyvalue===''){
this.dirs=this.tmpdirs;
}
let resultdata = [];
that.dirs.forEach((item) => {
if (item.name.indexOf(that.keyvalue) > -1 ) {
resultdata.push(item);
}
})
that.dirs=resultdata;
}
},
watch:{
keyvalue:function(){
let that = this;
setTimeout(function () {
that.searchDirName();
},300);
}
},
mounted() {
localStorage.setItem("dimensionhasPerm",undefined);
let that = this;
let h = window.innerHeight-105;
this.contentH="height:"+h+"px;overflow-y:auto;";
this.getDimensionList();
}
}
</script>
<style scoped>
.knwldir {
height: 100%;
}
.knwldir .content {
border-top: 0.33px solid #e9e9e9;
height: calc(100% - 105px);
overflow-y: auto;
}
.knwldir .content .item {
padding: 0 12px;
background: #fff;
}
.knwldir .content .van-cell {
padding: 8px 0;
/*border-bottom: 0.33px solid #e9e9e9;*/
}
.knwldir .content .van-cell:last-child {
border-bottom: 0;
}
.knwldir .content .van-cell .awsui-iconfont {
/*color: #03A76B;*/
margin-right: 8px;
}
.knwldir .content .van-cell .default {
color: #CCCCCC;
}
.treeHotspot {
color:#f3b731 !important;
}
.con {
position: absolute;
width: 100%;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
text-align: center;
}
.con .img {
width: 125px;
height: 125px;
margin: 0 auto;
}
.con .text {
color: #999;
line-height: 20px;
font-size: 13px;
width: 100%;
}
</style>

View File

@ -0,0 +1,349 @@
<template>
<div class="knwlhome">
<search v-model="keyword" :isFullsearchAppActive="isFullsearchAppActive" :filterSetting="filterSetting" @allSearch="allSearch" @searchfunc="searchMobileList"/>
<div class="content">
<div class="top" style="font-size: 11px;font-weight: bold;">
{{newTitle}}
<span class="icon-descending">
<van-icon name="descending" @click="showPopup"/>
</span>
<div class="dropdown-menu" v-if="show">
<van-sidebar v-model="activeKey" @change="onChange">
<van-sidebar-item v-for="(item,index) in dropDownList" :key="index" :title="item.text">
<i class="awsui-iconfont" style="color:red;">&#xe639;</i>
</van-sidebar-item>
</van-sidebar>
</div>
</div>
<van-loading v-show="initLoad" size="24" style="text-align: center;height: 300px;line-height: 300px;"/>
<list ref="knwlist" :pageSetting="{'loading':loading,'finished':finished}" @downLoadMore="downLoadMore" :style="contentStyle" class="content-list" v-if="!initLoad&&!fullSearch" :list="lists" :type="type"></list>
<list ref="fullknwlist" :pageSetting="{'loading':loading,'finished':finished}" @downLoadMore="allSearch" class="search-list" v-else-if="!initLoad" :searchval="keyword" :type="type" :list="resultList"></list>
</div>
<tabbar v-if="keyword===''"/>
</div>
</template>
<script>
import tabbar from '@/components/tabbar' //
import Search from '@/components/search'
import List from '@/components/list'
// import Radio from '@/components/radio'
import awsuiAxios from "../awsuiAxios";
export default {
name: 'knwlhome',
components: {
tabbar,
Search,
List,
// Radio
},
data() {
return {
initLoad:true,
loading: false,
finished: false,
isLoadingData:false,
offset:10,
keyword: '',
type: '-1',
searchsize:0,
show: false,
newTitle: '最新发布',
activeKey: 0,
sortIndx:"publishTime",
lists: [
],
resultList: [],
dropDownList: [
{text: '最新发布', value: "publishTime"},
{text: '阅读次数', value: "readCount"},
{text: '讨论次数', value: "commentCount"},
{text: '标题', value: "cardName"}
],
isSearch: false,
isLoading:false,
isFullsearchAppActive:false,
curPage:0,
totalRecords:0,
contentStyle:"",
fullSearch:false,
filterSetting:{
cardName: "",
publishTime: "",
publishUser: "",
departId: "",
tags: encodeURIComponent(JSON.stringify([])),
schemaMetaData:encodeURIComponent(JSON.stringify({
'01': [],
'2': []
}))
}
}
},
methods: {
downLoadMore(){
this.searchListParams();
},
showPopup() {
this.show = !this.show
},
onChange(index) {
this.show = false
this.newTitle = this.dropDownList[index].text;
this.sortIndx = this.dropDownList[index].value;
this.curPage = 0;
this.finished = false;
this.searchListParams();
},
allSearch(keyword,curpage) {
//
if(this.isLoadingData){
return;
}
this.fullSearch = true;
if(curpage!=undefined){
this.curPage = curpage;
}
if(this.curPage==0){
this.finished = false;
this.initLoad = true;
// this.$refs.fullknwlist.backTop();
}
this.isLoadingData = true;//
this.type='search';
let that = this;
this.isSearch = true;
awsuiAxios.post({
url: "jd",
data: {
cmd:"com.actionsoft.apps.kms_knwl_fullsearch_list_json",
curPage: this.curPage,
rowsPerPage: 0,
searchText: encodeURIComponent(keyword),
docTypes: JSON.stringify([]),// ["pdf", "doc", "ppt", "xls", "txt"]
searchType: "1"//1 2
},
}).then(function (r) {
that.isLoadingData = false;
that.loading = false;
that.initLoad = false;
if (r.result == "error") {
that.$toast({message: r.data?r.data.desc:r.msg, overlay: true});
that.finished = true;
} else {
that.searchsize = that.resultList.length;
if(that.curPage==0){
that.resultList = r.data.data.result;
}else{
that.resultList = that.resultList.concat(r.data.data.result);
}
that.curPage = r.data.data.curPage;
that.loading = false;
if(!r.data.data.hasNextPage){
that.finished = true;
}
}
});
},
brightKeyword(val) {
let keyword = this.keyword
if (val.indexOf(keyword) !== -1) {
return val.replace(keyword, `<font color='#E72C20'>${keyword}</font>`)
} else {
return val
}
},
searchMobileList(pageno){
if(this.isLoadingData){
return false;
}
this.fullSearch = false;
let that = this;
if(pageno!=undefined){
this.curPage = pageno;
}
if(this.curPage==0){
this.finished = false;
if(this.$refs.knwlist){
this.$refs.knwlist.backTop();
}
}
this.loading = true;
this.isLoadingData = true;//
this.type='knwlhome';
let option = {
cmd: "com.actionsoft.apps.kms_knwl_attr_search_dosearch",
searchDimensionIds: "[]",
schemaMetaData:this.filterSetting.schemaMetaData,
curPage:this.curPage<=0?1:this.curPage+1,
rowsPerPage:0,
cardName: this.filterSetting.cardName,
publishTime: this.filterSetting.publishTime,
publishUser: this.filterSetting.publishUser,
departId: this.filterSetting.departId,
tags:this.filterSetting.tags,// encodeURIComponent(JSON.stringify([])),
sortIndx:this.sortIndx,
sortDir: "down",
lastPublishId: '',
searchType: ""
};
//
awsuiAxios.post({
url: "jd",
data: option,
}).then(function (r) {
that.isLoadingData = false;
if (r.result == "error") {
that.$toast({message: r.data?r.data.desc:r.msg, overlay: true});
} else {
that.initLoad = false;
if(that.curPage<=0){
// that.resultList = r.data.data;
that.lists = r.data.data;
}else{
that.lists = that.lists.concat(r.data.data);
}
that.loading = false;
that.searchsize = that.lists.length;
that.curPage = r.data.curPage;
if(!r.data.hasNextPage){
that.finished = true;
}
}
});
},
searchListParams(){
this.searchMobileList();
},
checkFullsearchAppActive(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd:"com.actionsoft.apps.kms_knwl_center_mobile_check_fullsearch"
},
}).then(function (r) {
that.isFullsearchAppActive = r.data.isFullsearchAppActive;
});
}
},
mounted() {
let hh = window.innerHeight-51-87;
this.contentStyle = 'height:'+hh+"px";
this.checkFullsearchAppActive();
this.searchListParams();
},
watch: {
keyword: function () {
var that = this
if (that.keyword !== '') {
that.type = 'search'
}else{
this.isSearch = false;
}
}
}
}
</script>
<style scoped>
.knwlhome {
height: 100%;
}
.knwlhome .content {
border-top: 0.33px solid #e9e9e9;
color: #666;
/*height: 100%;*/
}
.top {
padding: 6px 12px;
line-height: 17px;
border-bottom: 0.33px solid #e9e9e9;
position: relative;
}
.icon-descending {
position: absolute;
font-size: 16px;
right: 10px;
}
.dropdown-menu {
position: absolute;
right: 12px;
font-weight: normal;
z-index: 10;
top: 30px;
background: #fff;
padding: 2px 6px;
box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.2);
border-radius: 0 0 2px 2px;
}
.dropdown-menu .van-sidebar {
width: auto;
}
.dropdown-menu .van-sidebar-item {
padding: 8px 8px 8px 24px;
font-size: 12px;
background: none;
border-bottom: 1px solid #f6f6f6;
}
.dropdown-menu .van-sidebar-item:last-child {
border-bottom: none;
}
.dropdown-menu .van-sidebar-item--select {
color: #378DEC;
}
.dropdown-menu .van-sidebar-item--select::before {
position: absolute;
top: 46%;
left: 6px;
transform: translateY(-50%);
content: "\2713";
background: none;
font-size: 14px;
}
.search-list {
height: calc(100% - 135px) !important;
overflow-y: auto;
}
.search-list {
height: calc(100% - 85px) !important;
}
.con {
position: absolute;
width: 100%;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
text-align: center;
}
.con .img {
width: 125px;
height: 125px;
margin: 0 auto;
}
.con .text {
color: #999;
line-height: 20px;
font-size: 13px;
width: 100%;
}
</style>

View File

@ -0,0 +1,53 @@
<template>
<div class="knwlportal">
<div style="margin-top: 7px;">
<van-row>
<van-col span="22">
<div style="font-size: 14px;color:#555555;margin-left:15px;text-align: left;">最新发布</div>
</van-col>
<van-col span="2">
<van-icon name="descending" @click="showPopup"/>
</van-col>
</van-row>
</div>
<list></list>
<van-popup v-model="show" position="right" :get-container="getContainer" style="height:100%;">
<radio/>
</van-popup>
</div>
</template>
<script>
/*知识库*/
import list from '../components/list'
import TreeSelect from '../components/treeSelect'
import DropdownMenu from '../components/dropdownMenu'
import cell from '../components/cell'
import Radio from '../components/radio'
export default {
name: 'knwlportal',
components: {Radio, DropdownMenu, TreeSelect, list, cell},
data () {
return {
show: false
}
},
methods: {
showPopup () {
this.show = true
},
// DOM
getContainer () {
return document.querySelector('.my-container')
}
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,94 @@
<template>
<div class="myborrow" :style="hstyle">
<van-loading v-if="initLoad" size="24" style="text-align: center;height: 300px;line-height: 300px;"/>
<list v-else @downLoadMore="downLoadMore" :pageSetting="{'loading':loading,'finished':finished}" type="borrow" :list="lists"></list>
</div>
</template>
<script>
import list from '../components/list'
import awsuiAxios from "../awsuiAxios";
export default {
name: 'myborrow',
components: {list},
data() {
return {
hstyle:"",
initLoad:true,
isLoadingData:false,//
loading:false,
finished:false,
curPage:0,
keyWord:"",
lists: []
}
},
methods: {
downLoadMore(){
this.searchMobileList("");
},
refreshList() {
console.log('myborrow:refreshList')
},
searchMobileList(key,type){
if(this.isLoadingData){
return;
}
this.isLoadingData = true;
let that = this;
if(type=='search'){
this.keyWord = key;
this.curPage =0;
this.finished = false;
}
//
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_borrow_card_list_json",
sortIndx:"CREATEDATE",
sortDir: "down",
rowsPerPage:0,
curPage:this.curPage<=0?1:this.curPage+1,
filter: encodeURIComponent(this.keyWord)
},
}).then(function (r) {
that.initLoad = false;
that.isLoadingData = false;
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
let rowsPerPage = r.data.rowsPerPage;
if(that.curPage==0){
that.lists = r.data.data;
}else{
that.lists =that.lists.concat( r.data.data);
}
that.loading = false;
that.curPage = r.data.curPage;
let totalRecords = r.data.totalRecords;
if(that.curPage*rowsPerPage>=totalRecords){
that.finished = true;
}
if(!that.finished&&that.curPage>=2&&that.lists.length<8){
that.searchMobileList("");
}
that.$emit("func",r.data.totalRecords,"borrow");
}
});
}
},
mounted(){
// this.hstyle ="height:"+ (window.innerHeight-44-54-51)+"px";
this.searchMobileList("");
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,99 @@
<template>
<div class="myfavorite" :style="hstyle">
<van-loading v-if="initLoad" size="24" style="text-align: center;height: 300px;line-height: 300px;"/>
<list v-else @downLoadMore="downLoadMore" :pageSetting="{'loading':loading,'finished':finished}" type="favorite" :list="lists"></list>
</div>
</template>
<script>
import list from '../components/list'
import awsuiAxios from "../awsuiAxios";
export default {
name: 'myfavorite',
components: {list},
data () {
return {
initLoad:true,
hstyle:"",
isLoadingData:false,//
loading:false,
finished:true,
curPage:0,
keyWord:"",
profileId:"",
count:0,
lists: [
]
}
},
methods: {
refreshList () {
console.log('myfavorite:refreshList')
},
downLoadMore(){
},
getData(){
let that = this;
//
awsuiAxios.post({
url: "jd",
async:false,
data: {
cmd: "com.actionsoft.apps.favorite_load_category_names"
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
console.log(r.msg);
} else {
let data = r.data.categoryNames;
for(let i in data){
if(data[i]['categoryName']=='KMS'){
that.profileId=data[i]['id'];
that.count = (data[i]['amount'] == undefined) ? 0 : data[i]['amount'];
break;
}
}
}
that.$emit("func",that.count,"favorite");
that.loadData("");
});
},
loadData(key){
//
if(this.isLoadingData){
return;
}
this.isLoadingData = true;
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.favorite_load_data",
profileId:this.profileId,
searchValue: key
},
}).then(function (r) {
that.initLoad = false;
that.isLoadingData = false;
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
that.lists = r.data.list;
}
});
}
},
mounted(){
// this.hstyle ="height:"+ (window.innerHeight-44-54-51)+"px";
this.getData();
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,117 @@
<template>
<div class="myknowledge" :style="hstyle">
<van-loading v-if="initLoad" size="24" style="text-align: center;height: 300px;line-height: 300px;"/>
<list v-else @changeSizeInfo="changeSizeInfo" @downLoadMore="downLoadMore" :pageSetting="{'loading':loading,'finished':finished}" type="knowl" :list="lists"></list>
<van-button round type="info" class="createBtn" @click="onNewKnowl">
<i class="awsui-iconfont">&#58915;</i>
</van-button>
</div>
</template>
<script>
import list from '../components/list'
import awsuiAxios from "../awsuiAxios";
export default {
name: 'myknowledge',
components: {list},
props:{
},
data () {
return {
hstyle:"",
initLoad:true,
isLoadingData:false,//
loading:false,
finished:false,
curPage:0,
keyWord:"",
lists: [
]
}
},
methods: {
downLoadMore(){
this.searchMobileList("");
},
refreshList () {
console.log('myknowledge:refreshList')
},
onNewKnowl() {
this.$router.push({
name:'new-knowledge',
params:{
type:"create",
cardId:""
}
})
},
searchMobileList(key,type){
if(this.isLoadingData){
return;
}
let that = this;
if(type=='search'){
this.keyWord = key;
this.curPage =0;
this.finished = false;
}
this.isLoadingData = true;
//
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_me_card_list_json",
sortIndx:"createTime",
sortDir: "down",
rowsPerPage:0,
curPage:this.curPage<=0?1:this.curPage+1,
filter: encodeURIComponent(this.keyWord)
},
}).then(function (r) {
that.initLoad = false;
that.isLoadingData = false;
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
let rowsPerPage = r.data.rowsPerPage;
if(that.curPage==0){
that.lists = r.data.data;
}else{
that.lists =that.lists.concat( r.data.data);
}
that.loading = false;
that.curPage = r.data.curPage;
let totalRecords = r.data.totalRecords;
if(that.curPage*rowsPerPage>=totalRecords){
that.finished = true;
}
if(!that.finished&&that.curPage>=2&&that.lists.length<8){
that.searchMobileList("");
}
}
});
},
changeSizeInfo(){
this.$emit("func",-1,"knowledge");
}
},
mounted(){
this.hstyle ="height:"+ (window.innerHeight-44-54-51)+"px";
this.searchMobileList("");
}
}
</script>
<style scoped>
.createBtn {
border: 0 !important;
background-color:#378DEC !important;
position: fixed;
bottom: 80px;
right: 30px;
box-shadow:0px 4px 9px 1px #cfe1f5;
}
</style>

View File

@ -0,0 +1,101 @@
<template>
<div class="mypublish" :style="hstyle">
<van-loading v-if="initLoad" size="24" style="text-align: center;height: 300px;line-height: 300px;"/>
<list v-else @refreshCount="refreshCount" :myPublicCount="myPublicCount" @downLoadMore="downLoadMore" :pageSetting="{'loading':loading,'finished':finished}" type="publish" :list="lists"></list>
</div>
</template>
<script>
import list from '../components/list'
import awsuiAxios from "../awsuiAxios";
export default {
name: 'mypublish',
components: {list},
props:{
myPublicCount:Number
},
data () {
return {
initLoad:true,
hstyle:"",
isLoadingData:false,
loading:false,
finished:false,
curPage:0,
keyWord:"",
lists: [
]
}
},
methods: {
downLoadMore(){
this.searchMobileList("");
},
refreshCount(count){
this.$emit("func",count,"publish");
},
refreshList () {
console.log('mypublish:refreshList')
},
searchMobileList(key,type){
if(this.isLoadingData){
return;
}
this.isLoadingData = true;
let that = this;
if(type=='search'){
this.keyWord = key;
this.curPage =0;
this.finished = false;
}
//
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_publish_card_list_json",
sortIndx:"publishTime",
sortDir: "down",
rowsPerPage:0,
curPage:this.curPage<=0?1:this.curPage+1,
filter: encodeURIComponent(this.keyWord)
},
}).then(function (r) {
that.initLoad = false;
that.isLoadingData = false;
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
let rowsPerPage = r.data.rowsPerPage;
if(that.curPage==0){
that.lists = r.data.data;
}else{
that.lists =that.lists.concat( r.data.data);
}
that.loading = false;
that.curPage = r.data.curPage;
let totalRecords = r.data.totalRecords;
if(that.curPage*rowsPerPage>=totalRecords){
that.finished = true;
}
if(!that.finished&&that.curPage>=2&&that.lists.length<6){
that.searchMobileList("");
}
}
});
}
},
mounted(){
// this.hstyle ="height:"+ (window.innerHeight-44-54-51)+"px";
this.searchMobileList("");
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,179 @@
<template>
<div class="myknwl">
<van-search v-model="value" placeholder="请输入文件名关键词" @search="search"/>
<van-tabs v-model="active" @click="onClick" line-width="25%" line-height="1" title-active-color="#378DEC">
<van-tab name="myknowledge" title="我的知识" :info="myKnowlageCount">
<my-knowledge ref="myknowledge" @func="changeCount"></my-knowledge>
</van-tab>
<van-tab name="mypublish" title="我发布的" :info="myPublicCount">
<my-publish ref="mypublish" @func="changeCount" :myPublicCount="myPublicCount"></my-publish>
</van-tab>
<van-tab name="myborrow" title="我借阅的" :info="myBorrowCount">
<my-borrow ref="myborrow" @func="changeCount" ></my-borrow>
</van-tab>
<template>
<span v-if="showFavorite">
<van-tab name="myfavorite" title="我的收藏" :info="myFavoriteCount">
<my-favorite ref="myfavorite" @func="changeCount"></my-favorite>
</van-tab>
</span>
</template>
</van-tabs>
<tabbar/>
</div>
</template>
<script>
import tabbar from '../components/tabbar'
import myKnowledge from '../pages/myKnowledge'
import myPublish from '../pages/myPublish'
import myBorrow from '../pages/myBorrow'
import myFavorite from '../pages/myFavorite'
import awsuiAxios from "../awsuiAxios";
export default {
name: 'myknwl',
components: {
tabbar,
myKnowledge,
myPublish,
myBorrow,
myFavorite
},
data() {
return {
showFavorite:false,//
value: '',
active: 'myknowledge',
myFavoriteCount:"",
myKnowlageCount:"",
myBorrowCount:"",
myPublicCount:"",
rowpage:23
}
},
methods: {
search(){
if(this.active=='myknowledge'){
this.$refs.myknowledge.searchMobileList(this.value,"search");
}else if(this.active=='mypublish'){
this.$refs.mypublish.searchMobileList(this.value,"search");
}else if(this.active=='myborrow'){
this.$refs.myborrow.searchMobileList(this.value,"search");
}else if(this.active=='myfavorite'){
this.$refs.myfavorite.loadData(this.value,"search");
}
},
onClick(name, title) {
this.value = "";
localStorage.setItem("activeTab",name);
this.$nextTick(() => {
this.$refs[name].refreshList()
})
},
getfavoriteData(){
let that = this;
//
awsuiAxios.post({
url: "jd",
async:false,
data: {
cmd: "com.actionsoft.apps.favorite_load_category_names"
},
}).then(function (r) {
if (r.result == "error") {
console.log(r.msg);
} else {
let data = r.data.categoryNames;
let countTmp = 0;
for(let i in data){
if(data[i]['categoryName']=='KMS'){
countTmp = (data[i]['amount'] == undefined) ? 0 : data[i]['amount'];
break;
}
}
that.myFavoriteCount = countTmp==0?'':countTmp;
}
});
},
changeCount(count,type){
if(type=='favorite'){
this.myFavoriteCount = count>0?count:"";
}else if(type=='knowledge'){
if(count==-1){
count = parseInt(this.myKnowlageCount)-1;
}
this.myKnowlageCount=count>0?count:"";
}else if(type=='borrow'){
this.myBorrowCount=count>0?count:"";
}else if(type=='publish'){
this.myPublicCount=count>0?count:"";
}
this.getfavoriteData();
},
initCount(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_mobile_center_knowladge_count"
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
let data = r.data;
that.myKnowlageCount = data.meCount==0?"":data.meCount;
that.myBorrowCount = data.borrowCount==0?"":data.borrowCount;
that.myPublicCount = data.publishCount==0?"":data.publishCount;
that.showFavorite = data.showFavorite;
}
});
}
},
watch:{
value:function () {
this.search();
}
},
created(){
let activel = localStorage.getItem("activeTab");
if(activel=='myfavorite'){
this.showFavorite = true;
}
},
mounted(){
let activel = localStorage.getItem("activeTab");
if(activel!=undefined&&activel!=''){
this.active=activel;
}
this.initCount();
this.getfavoriteData();
}
}
</script>
<style scoped>
.myknwl {
height: 100%;
}
</style>
<style>
.myknwl .van-tab {
border-top: 0.33px solid #e9e9e9;
border-bottom: 0.33px solid #e9e9e9;
}
.myknwl .van-tabs__nav .van-tabs__line {
height: 2px !important;
background-color:#378DEC !important;
}
.van-info{
top: -3px;
right: 0px;
}
</style>

View File

@ -0,0 +1,712 @@
<template>
<div class="knowledge"
:style="heights">
<div style="padding: 3px 10px;position: fixed;width: 100%;background:#f2f3f5;z-index: 999">
<i style="font-size: 18px;color:#000"
class="awsui-iconfont"
@click="backHome">&#xe6fa;</i>
</div>
<van-form style="margin-top: 30px;">
<van-field
class="border"
v-model="knwlName"
required
label="标题"
placeholder="请输入标题"
/>
<van-field-date
class="border"
v-model="validDate"
:minDate="minDate"
cancel-button-text="清除"
type="date"
label="有效期"
placeholder="默认长期有效"
@change="confirmDate"
@cancelDate="cancelDate"
/>
<van-field-select
class="border"
label="格式转换"
placeholder="请选择"
:defaultIndex="defaultIndex2"
ref="control"
v-model="control"
:columns="controlOption"
/>
<van-field-select
class="border"
label="保密级别"
placeholder="请选择"
:defaultIndex="defaultIndex3"
v-model="secrecyLevel"
ref="secrecyLevel"
:columns="secrecyLevelOption"
/>
<van-field-select
class="border"
label="评论"
placeholder="请选择"
ref="comment"
:defaultIndex="defaultIndex4"
v-model="comment"
:columns="commentOption"
/>
<van-field-select
class="border"
label="打分"
placeholder="请选择"
v-model="grade"
:defaultIndex="defaultIndex1"
ref="rate"
:columns="gradeOption"
@change="onSelectChange"
/>
<van-field
v-show="displayContent"
ref="knowContent"
v-html="remarks"
:autosize="{ maxHeight: 100, minHeight: 100 }"
type="textarea"
label="内容"
placeholder="请输入知识正文描述"
/>
</van-form>
<div style="display: none"
v-html="remarksTmp"
ref="tmpcontent">{{ remarksTmp }}
</div>
<div style="width: 100%;text-align: center;"><span class="upfile-title">请到PC端上传附件</span></div>
<div class="divide"></div>
<ul v-if="list.length > 0"
class="list">
<li v-for="(item,index) in list"
:key="index">
<div class="icon">
<i class="awsui-iconfont"
v-html="getIcon(item.fileSuffixIcon)"></i>
</div>
<div class="left">
<div class="title"
style="color: #378DEC;"
@click="fileOperatePreview(item)">
{{ item.fileName }}
</div>
<div class="description">
{{ item.createTime }} <span style="color: #dcdee0">|</span> {{ item.createUsername }} <span style="color: #dcdee0">|</span>
{{ formatSize(item.fileSize) }} <span style="color: #dcdee0">|</span> v{{ item.fileVer }}
</div>
</div>
<div class="right">
<i v-show="item.fileState!=2"
class="awsui-iconfont"
@click="downloadFile(item)"
style="color: #4A90E2;margin-right: 10px;">&#xe653;</i>
<i class="awsui-iconfont"
@click="deleteFile(item)">&#xe626;</i>
</div>
</li>
</ul>
<div v-else
class="content">
<div class="img">
<img src="../assets/no_content.png"
alt=""
style="width: 88px;">
</div>
<span style="font-size: 13px; margin: 2px 0 5px;">暂无知识文件</span>
</div>
<div class="footer">
<van-button plain
type="info"
@click="onSave('')">保存
</van-button>
<van-button type="info"
:disabled="disableRelease"
@click="onRelease">发布
</van-button>
</div>
<van-dialog v-model="showDialog"
show-cancel-button
@confirm="handleDialog">
<span style="text-align: center;padding: 20px 0;display: inline-block;width: 100%;">确定要删除该文件吗</span>
</van-dialog>
</div>
</template>
<script>
import vanFieldSelect from "@/components/fieldSelect";
import vanFieldDate from "@/components/fieldDate";
import awsuiAxios from "../awsuiAxios";
export default {
name: "new-knowledge",
components: {
vanFieldSelect,
vanFieldDate
},
data() {
return {
kmsSetting: {},
heights: "",
disableRelease: false,
defaultIndex1: 0,
defaultIndex2: 0,
defaultIndex3: 0,
defaultIndex4: 0,
cardSetting: {},
displayContent: true,//
knwlName: "",
validDate: "",
formatter: "date",
minDate: new Date(),
showDialog: false,
control: "转换PDF格式在线阅读允许下载",
controlOption: [{
text: "常规",
children: [{
text: "转换PDF格式在线阅读允许下载",
value: "1"
}, {
text: "转换PDF格式在线阅读禁止下载",
value: "2"
}]
}, {
text: "安全",
children: [{
text: "转换图片格式在线阅读,禁止下载(首次转换时间较长)",
value: "0"
}]
// defaultIndex: 0
}],
secrecyLevel: "普通",
secrecyLevelOption: ["普通", "秘密", "机密"],
comment: "允许评论",
commentOption: ["允许评论", "禁止评论"],
grade: "允许打分",
gradeOption: ["允许打分", "禁止打分"],
remarks: "",
remarksTmp: "",
id: 1,
list: [],
deleteFileItem: {}
};
},
methods: {
backHome() {
window.history.back();
},
handleDialog() {
this.showDialog = false;
let that = this;
that.deleteFileId = this.deleteFileItem.id;
//
awsuiAxios.post({
url: "jd",
data: {
cardId: this.cardSetting.cardId,
cmd: "com.actionsoft.apps.kms_knwl_center_delete_file",
fileId: this.deleteFileItem.id
}
}).then(function (r) {
if (r.result == "error") {
that.$toast({message: r.data ? r.data.desc : r.msg, overlay: true});
} else {
that.$toast({message: "删除成功", overlay: true});
let size = that.list.length;
for (let i = 0; i < size; i++) {
if (that.list[i]["id"] == that.deleteFileId) {
that.list.splice(i, 1);
break;
}
}
}
});
},
getIcon(fileSuffixIcon) {
if (["jpg", "gif", "tif", "tiff", "bmp", "jpeg2000", "psd", "png", "svg", "pcx", "dxf", "wmf", "emf", "eps", "tga"].includes(fileSuffixIcon)) {
return "&#xe74d;";
} else if (["ppt", "pptx"].includes(fileSuffixIcon)) {
return "&#xe7d4;";
} else if (["doc", "docx"].includes(fileSuffixIcon)) {
return "&#xe7ea;";
} else if (["xls", "xlsx"].includes(fileSuffixIcon)) {
return "&#xe7d0;";
} else if (["pdf"].includes(fileSuffixIcon)) {
return "&#xe684;";
} else if (["zip"].includes(fileSuffixIcon)) {
return "&#xe687;";
} else {
return "&#xe72b;";
}
},
deleteFile(item) {
this.showDialog = true;
this.deleteFileItem = item;
},
onSave(type) {
let knwlName = this.knwlName;
if (knwlName == "") {
this.$toast({message: "[标题]不允许为空", overlay: true});
return false;
}
if (knwlName.length > 128) {
this.$toast({message: "[标题]长度不能超过128个字符", overlay: true});
return false;
}
let commentVal = this.comment == "允许评论";
let control = "1";
let secrecyLevel = 0;
let grade = this.grade == "允许打分";
if (this.secrecyLevel == "秘密") {
secrecyLevel = "1";
} else if (this.secrecyLevel == "机密") {
secrecyLevel = "2";
}
if (this.control == "转换PDF格式在线阅读禁止下载") {
control = "2";
} else if (this.control.indexOf("首次转换时间较长") > -1) {
control = "0";
}
let vali = this.validDate;
if (vali != "") {
let date = new Date(this.validDate);
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
month = month < 10 ? "0" + month : month;
day = day < 10 ? "0" + day : day;
vali = year + "-" + month + "-" + day;
}
let cardId = this.cardSetting.cardId;
let that = this;
that.saveType = type;
//
awsuiAxios.post({
url: "jd",
data: {
cmd: cardId == "" ? "com.actionsoft.apps.kms_knwl_center_insert_card" : "com.actionsoft.apps.kms_knwl_center_update_card",
cardId: cardId,
cardName: knwlName,
validDate: vali,
onlineLevel: control,
securityLevel: secrecyLevel,
cardType: 0,
isComment: commentVal,
isRate: grade,
cardContext: this.remarks
}
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
that.$toast({message: r.data ? r.data.desc : r.msg, overlay: true});
} else {
if (r.data && !that.cardSetting.cardId) {
that.cardSetting.cardId = r.data.cardId;
}
if (that.saveType == "release") {
if (that.remarks.length == 0 && that.list.length == 0) {
that.$toast({message: "知识[" + that.knwlName + "]没有文件或知识内容,不允许发布该知识", overlay: true});
} else {
that.cardSetting.type = "editor";
localStorage.setItem("cardSetting", JSON.stringify(that.cardSetting));
that.$router.push({
name: "release-knowledge",
params: {
id: r.data ? r.data.cardId : that.cardSetting.cardId,
name: that.knwlName,
type: "myknowledge"
}
});
}
} else {
that.$toast({message: "保存成功", overlay: true});
}
}
});
},
formatSize(size) {
if (size == "0") {
return "-";
}
size = parseFloat(size);
let units = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB", "BB"];
let step = 1024;
let unitIndex = 0;
while (true) {
if (size > 1024) {
size = parseFloat(size / step).toFixed(2);
unitIndex++;
} else {
break;
}
}
return size + units[unitIndex];
},
getFiles() {
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cardId: this.cardSetting.cardId,
cmd: "com.actionsoft.apps.kms_knwl_center_file_list_json"
}
}).then(function (r) {
if (r.result == "error") {
that.$toast({message: r.data ? r.data.desc : r.msg, overlay: true});
} else {
that.list = r.data;
}
});
},
getCardDetail() {
let that = this;
//
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_browse_card_info_json",
cardId: this.cardSetting.cardId,
isBorrow: false,
boId: "",
isEdit: true,
dimensionId: this.cardSetting.dimensionId
}
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
that.$toast({message: r.data ? r.data.desc : r.msg, overlay: true});
} else {
that.cardSetting.type = "editor";
let data = r.data;
let card = data.card;
that.validDate = card.validDate;
let secrecyLevel = card.securityLevel;
let secrecy = "普通";
if (secrecyLevel == 1) {
that.defaultIndex3 = 1;
secrecy = "秘密";
} else if (secrecyLevel == 2) {
secrecy = "机密";
that.defaultIndex3 = 2;
}
let commentl = "允许评论";
if (!card.isComment || card.isComment == 0) {
that.defaultIndex4 = 1;
commentl = "禁止评论";
}
let rate = "允许打分";
if (!card.isRate || card.isRate == 0) {
that.defaultIndex1 = 1;
rate = "禁止打分";
}
let onlineLevel = "转换PDF格式在线阅读允许下载";
if (card.onlineLevel == 2) {
that.defaultIndex2 = 1;
onlineLevel = "转换PDF格式在线阅读禁止下载";
} else if (card.onlineLevel == 0) {
that.defaultIndex2 = 2;
onlineLevel = "转换图片格式在线阅读,禁止下载(首次转换时间较长)";
}
that.secrecyLevel = secrecy;
that.comment = commentl;
that.grade = rate;
that.control = onlineLevel;
that.$refs.secrecyLevel.changeValue(secrecy);
that.$refs.comment.changeValue(commentl);
that.$refs.rate.changeValue(rate);
that.$refs.control.changeValue(onlineLevel);
that.knwlName = data.cardName;
/*let re1 = new RegExp("<.+?>", "g");
that.remarks = card.cardContext.replace(re1, "");*/
//
that.remarks = card.cardContext;
let validDateTmp = card.validDate;
let datee = new Date();
let mm = datee.getMonth() + 1;
let day = datee.getDate();
let currentDate = datee.getFullYear() + "-" + (mm < 10 ? "0" : "") + mm + "-" + (day < 10 ? "0" : "") + day;
if (validDateTmp && validDateTmp != "" && validDateTmp < currentDate) {
that.disableRelease = true;
}
}
});
},
onSelectChange(indx) {
},
onRelease() {
this.onSave("release");
},
confirmDate(tmpdate) {
if (tmpdate != "") {
let date = new Date(tmpdate);
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
month = month < 10 ? "0" + month : month;
day = day < 10 ? "0" + day : day;
tmpdate = year + "-" + month + "-" + day;
let datee = new Date();
let mm = datee.getMonth() + 1;
let currDay = datee.getDate();
let currentDate = datee.getFullYear() + "-" + (mm < 10 ? "0" : "") + mm + "-" + (currDay < 10 ? "0" : "") + currDay;
if (tmpdate < currentDate) {
this.disableRelease = true;
} else {
this.disableRelease = false;
}
} else {
this.disableRelease = false;
}
},
cancelDate() {
this.validDate = "";
},
downloadFile(obj) {
localStorage.setItem("cardSetting", JSON.stringify(this.cardSetting));
window.location.href = obj.fileDownloadURL;
},
fileOperatePreview(obj) {
localStorage.setItem("cardSetting", JSON.stringify(this.cardSetting));
let fileType = obj.fileName.lastIndexOf(".") > -1 ? obj.fileName.substring(obj.fileName.lastIndexOf(".") + 1, obj.fileName.length) : "";
let tmpSetting = this.kmsSetting;
let previewTypes = tmpSetting.browserPreview.split(",");
let hasType = false;
previewTypes.forEach((ob, index) => {
if (ob == fileType) {
hasType = true;
}
});
let data = {};
if (hasType || obj.fileState == 2) {// onlinedoc
data = {
cmd: "com.actionsoft.apps.kms_knwl_browser_preview",
fileId: obj.id
};
} else {
if (tmpSetting.isOnlinedocAppActive) {
//showFullScreenPanel
data = {
cmd: "com.actionsoft.apps.kms_knwl_center_preview_file",
isDownload: false,
isCopy: true,
fileId: obj.id
};
} else {
return;
}
}
let that = this;
awsuiAxios.post({
url: "jd",
data: data
}).then(function (r) {
if (r.result == "error") {
that.$toast({message: r.data ? r.data.desc : r.msg, overlay: true});
} else {
let url = r.data.url;
var head = document.location.origin + "/portal";
if (url.indexOf("./df") > -1) {
url = url.replace("./df", head + "/r/df");
} else {
url = url.replace("./w", head + "/r/w");
}
try {
if (awsWebview.openWebviewPost(url, null) === false) {
window.location.href = url;
}
} catch (e) {
}
}
});
},
getSettingFile() {
//
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_mobile_check_fullsearch"
}
}).then(function (r) {
that.kmsSetting = r.data.setting;
});
}
},
watch: {},
mounted() {
this.displayContent = false;
let h = window.innerHeight - 64;
this.heights = "height:" + h + "px;";
let tmpParams = this.$route.params;
if (tmpParams.cardId == undefined) {
tmpParams = JSON.parse(localStorage.getItem("cardSetting"));
localStorage.setItem("cardSetting", "");
}
this.getSettingFile();
this.cardSetting = tmpParams;
if (this.cardSetting.type != "create") {
this.getCardDetail();
this.getFiles();
}
}
};
</script>
<style scoped>
.knowledge {
height: calc(100% - 64px);
overflow-y: auto;
}
.list {
padding: 0 12px;
width: calc(100% - 24px);
}
.list span, .list label {
display: inline-block;
}
.list li {
float: left;
padding: 11px 0;
width: 100%;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
.list li:not(:last-child) {
border-bottom: 0.33px solid #e9e9e9;
}
.list li .icon {
float: left;
padding-right: 8px;
}
.list li .icon .awsui-iconfont {
font-size: 16px;
color: #FFB800;
}
.list li .left {
width: calc(100% - 35px);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
float: left;
}
.list li .left .title {
font-size: 13px;
color: #333;
line-height: 18px;
margin-bottom: 4px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.list li .left .description {
color: #999999;
line-height: 15px;
font-size: 12px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.list li .left .description .line {
display: inline-block;
margin: 0 6px;
}
.list li .right {
/*width: 50px;*/
text-align: right;
float: right;
/*margin-top: 18px;*/
color: #D54C4C;
}
.list li .right .awsui-iconfont {
font-size: 14px;
}
.content {
position: relative;
padding: 16px 0 20px;
text-align: center;
display: inline-block;
width: 100%;
}
.content span {
width: 100%;
display: inline-block;
color: #999;
line-height: 18px;
}
.content .img {
width: 86px;
height: 86px;
margin: 0 auto;
}
.footer {
padding: 12px;
position: fixed;
border-top: 0.33px solid #e9e9e9;
left: 0;
right: 0;
bottom: 0;
background: #fff;
z-index: 1;
}
.footer .van-button {
height: 38px;
line-height: 38px;
/*width: 100%;*/
width: calc(100% / 2 - 12px);
margin-right: 12px;
border-radius: 2px;
padding: 0 !important;
}
.footer .van-button:last-child {
margin-right: 0;
}
.upfile-title {
border: 1px dashed #ccc;
width: calc(100% - 40px);
display: inline-block;
padding: 8px;
border-radius: 3px;
font-size: 13px;
color: #CCCCCC;
}
textarea {
border: 1px solid #e9e9e9 !important;
}
.van-picker-column {
overflow: unset !important;
width: calc(100% - 64px) !important;
}
</style>
<style>
/*控制输入框的内容不与下拉箭头重叠*/
.knowledge .van-field__body {
width: 90%;
}
</style>

View File

@ -0,0 +1,194 @@
<template>
<div class="apply">
<van-form>
<van-field
class="background"
v-model="applyName"
required
label="申请人"
placeholder="请输入申请人"
:rules="[{ required: true, message: '申请人不能为空' }]"
/>
<van-field
class="background"
v-model="knwlName"
label="知识名称"
placeholder="请输入知识名称"
/>
<van-field
class="background"
v-model="knwlPath"
label="知识路径"
placeholder=""
/>
<van-field
class="background"
v-model="admin"
label="管理员"
placeholder=""
/>
<van-field
class="border"
v-model="remarks"
required
:autosize="{ maxHeight: 100, minHeight: 100 }"
type="textarea"
label="备注"
placeholder=""
/>
</van-form>
<div class="divide"></div>
<ul class="list">
<li v-for="(item,index) in list" :key="index">
<div class="icon">
<i class="awsui-iconfont" v-html="item.icon"></i>
</div>
<div class="title">
{{index+1}}{{item.file}}
</div>
</li>
</ul>
<div class="footer">
<van-button type="danger">作废</van-button>
<van-button plain type="info" @click="onSave">保存</van-button>
<van-button type="info" @click="onHandle">办理</van-button>
<van-button type="default">更多</van-button>
</div>
</div>
</template>
<script>
import vanFieldSelect from '@/components/fieldSelect'
import vanFieldDate from '@/components/fieldDate'
export default {
name: 'release-apply',
components: {
vanFieldSelect,
vanFieldDate
},
data() {
return {
applyName: '司马懿',
knwlName: 'AWS访问连接池参数调整',
knwlPath: '知识目录 > 公司 > 重要文件',
admin: '张飞',
remarks: '',
list: [
{
file: '这里是文件名称',
icon: '&#xe65a;'
},
{
file: '这里是文件名称',
icon: '&#xe65a;'
},
{
file: '这里是文件名称',
icon: '&#xe65a;'
}
],
approveName: '诸葛亮'
}
},
methods: {
onSave(values) {
console.log('submit', values)
},
onHandle() {
this.$toast({
message: '已发送给【' + this.approveName + '】审批',
overlay: true,
onClose: (() => {
this.$router.push({
name: 'release-approve'
})
})
})
}
},
watch: {
control: function () {
if (this.control === '阅读次数') {
this.showReadTimes = true
this.showDate = false
} else {
this.showReadTimes = false
this.showDate = true
}
}
}
}
</script>
<style scoped>
.apply {
height: calc(100% - 64px);
overflow-y: auto;
}
.list {
padding: 7px 12px;
width: calc(100% - 24px);
float: left;
}
.list span, .list label {
display: inline-block;
}
.list li {
float: left;
padding: 5px 0;
width: 100%;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
.list li .icon {
float: left;
padding-right: 10px;
}
.list li .icon .awsui-iconfont {
font-size: 23px;
color: #FFB800;
}
.list li .title {
width: calc(100% - 33px);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
float: left;
line-height: 20px;
color: #565656;
font-size: 14px;
}
.footer {
padding: 12px;
position: fixed;
border-top: 0.33px solid #e9e9e9;
left: 0;
right: 0;
bottom: 0;
background: #fff;
z-index: 1;
}
.footer .van-button {
height: 38px;
line-height: 38px;
width: calc(100% / 4 - 12px);
margin-right: 12px;
border-radius: 2px;
padding: 0 !important;
}
.footer .van-button:last-child {
margin-right: 0;
}
</style>

View File

@ -0,0 +1,323 @@
<template>
<div class="approve">
<van-form @submit="onSubmit" style="padding:0 16px;">
<van-field
v-model="applyName"
label="申请人"
/>
<van-field
v-model="knwlName"
label="知识名称"
/>
<van-field
v-model="knwlPath"
label="知识路径"
/>
<van-field
v-model="admin"
label="管理员"
/>
<van-field
v-model="documentClass"
label="文档类别"
/>
<van-field
v-model="projectProcess"
label="项目过程"
/>
<van-field
v-model="tags"
label="标签"
/>
<van-field
v-model="remarks"
label="备注"
/>
</van-form>
<div class="divide"></div>
<ul class="list">
<li v-for="(item,index) in list" :key="index">
<div class="icon">
<i class="awsui-iconfont" v-html="item.icon"></i>
</div>
<div class="title">
{{index+1}}{{item.file}}
</div>
</li>
</ul>
<div class="divide"></div>
<div class="steps" :class="recordList.length==1?'center':''">
<span class="title" style="margin-bottom: 15px;">审批记录</span>
<div class="items" v-for="(item,index) in recordList" :key="index">
<span class="left">
<label class="head">
<img :src="item.headImg" alt="">
</label>
<label class="name">{{item.name}}</label>
</span>
<span class="right">
<label class="title" :style="index==recordList.length-1?'padding:0':''">{{item.title}}</label>
<label class="date">{{item.date}}</label>
<label class="circle" :class="{'active':currentActive==index}"></label>
<label class="line" :style="index==recordList.length-1?'height:30px;':''"></label>
</span>
</div>
</div>
<div class="footer">
<van-button type="danger">不同意</van-button>
<van-button type="info">同意</van-button>
<van-button type="default">更多</van-button>
</div>
</div>
</template>
<script>
import vanFieldSelect from '@/components/fieldSelect'
import vanFieldDate from '@/components/fieldDate'
export default {
name: 'release-approve',
components: {
vanFieldSelect,
vanFieldDate
},
data() {
return {
applyName: '司马懿',
knwlName: 'AWS访问连接池参数调整',
knwlPath: '知识目录 > 公司 > 重要文件',
admin: '张飞',
documentClass: '销售;流程管理方案库;流程管理;项目管理',
projectProcess:'流程管理方案库;流程管理;项目管理; 流程管理方案库;流程管理;项目管理',
tags:'这里是标签内容;标签的内容;',
remarks: '申请发布',
list: [
{
file: '这里是文件名称',
icon: '&#xe65a;'
},
{
file: '这里是文件名称',
icon: '&#xe65a;'
},
{
file: '这里是文件名称',
icon: '&#xe65a;'
}
],
currentActive: 1,
recordList: [
{
headImg: require('../assets/header.png'),
name: '司马懿',
title: '发布申请 (提交)',
date: '2019-12-10 08:22:23'
},
{
headImg: require('../assets/logo.png'),
name: '司马懿',
title: '发布审批 (正在办理)',
date: '2019-12-10 09:32:17'
},
{
headImg: require('../assets/header.png'),
name: '司马懿',
title: '发布审批 (办理中)',
date: '2019-12-10 08:22:23'
},
{
headImg: require('../assets/header.png'),
name: '司马懿',
title: '办理成功',
date: '2019-12-10 08:22:23'
},
]
}
},
methods: {
onSubmit(values) {
console.log('submit', values)
}
}
}
</script>
<style scoped>
.approve {
height: 100%;
overflow-y: auto;
}
.approve .van-form .van-cell {
border-bottom: 1px solid #EFEFEF;
padding: 10px 0;
}
.approve .van-form .van-cell:last-child {
border-bottom: none;
}
.footer {
padding: 12px;
position: fixed;
border-top: 0.33px solid #e9e9e9;
left: 0;
right: 0;
bottom: 0;
background: #fff;
z-index: 1;
}
.footer .van-button {
height: 38px;
line-height: 38px;
width: calc(100% / 3 - 12px);
margin-right: 12px;
border-radius: 2px;
padding: 0 !important;
}
.footer .van-button:last-child {
margin-right: 0;
}
.approve .steps {
position: relative;
overflow-y: auto;
padding: 16px 14px 0;
margin-bottom: 63px;
}
.approve .center {
display: flex;
justify-content: center;
align-items: center;
}
.approve .steps .items {
color: #333;
}
/*.approve .steps .active {
color: #3CA772;
background-color: #3CA772;
}*/
.approve .steps .left {
width: 46px;
font-size: 14px;
display: inline-block;
vertical-align: top;
text-align: center;
}
.approve .steps .left .head {
width: 44px;
height: 44px;
border-radius: 50%;
border: 1px solid #e0e0e0;
position: relative;
}
.approve .steps .left .head img {
max-width: 70%;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background-color: white;
border-radius: 50%;
}
.approve .steps .left .name {
line-height: 20px;
font-size: 12px;
}
.approve .steps .right {
width: calc(100% - 90px);
padding: 10px 0 40px 40px;
position: relative;
display: inline-block;
}
.approve .steps .title {
font-size: 14px;
display: inline-block;
vertical-align: top;
min-height: 20px;
line-height: 20px;
font-weight: bold;
width: 100%;
}
.approve .steps .date {
color: #666;
line-height: 20px;
}
.approve .steps .items .circle, .approve .steps .active .circle {
position: absolute;
top: 15px;
left: 11px;
background-color: #3CA772;
width: 11px;
height: 11px;
border-radius: 50%;
}
.approve .steps .active .circle {
background-color: #3CA772;
}
.approve .steps .items .line {
position: absolute;
top: 25px;
left: 16px;
width: 1px;
height: 100%;
background: #e0e0e0;
}
.list {
padding: 7px 12px;
width: calc(100% - 24px);
float: left;
}
.list span, .list label {
display: inline-block;
}
.list li {
float: left;
padding: 5px 0;
width: 100%;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
.list li .icon {
float: left;
padding-right: 10px;
}
.list li .icon .awsui-iconfont {
font-size: 23px;
color: #FFB800;
}
.list li .title {
width: calc(100% - 33px);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
float: left;
line-height: 20px;
color: #565656;
font-size: 14px;
}
</style>

View File

@ -0,0 +1,514 @@
<template>
<div class="release" v-if="showRelease">
<div class="title" style="font-weight: bold;">发布知识:{{title}}</div>
<div class="release-data" :style="datastyle">
<div class="knowlSelect">
<van-field
v-model="publishDimensionNames"
label="知识维度"
required
right-icon="arrow"
placeholder="请选择"
input-align="right"
@click="onDimension"
/>
</div>
<div class="divide"></div>
<ul class="list">
<li v-for="(item,index) in list" :key="index">
<div :class="item.isNullable==1?'title':'title required' " >
{{item.schemaTitle}}
<span v-show="item.showType==1" @click="clearData(item)" style="float: right">清空</span>
</div>
<div class="con">
<span v-show="item.showType<2" class="classify"
:style="(index+1)%3===0?'width: calc(100% / 3 - 17px); margin-right:1px;':''"
v-for="(el,index) in item.attrList" :key="index" @click="onClassify(el,item)"
:class="{classActive:el.active}">
<label class="name">{{el.attrTitle}}</label>
</span>
<div v-show="item.showType==2">
<van-field v-model="item.value" placeholder="请输入..." />
</div>
</div>
</li>
</ul>
<div class="tag">
<div class="name" style="font-size: 14px;">标签</div>
<ul class="con">
<span class="classify classActive"
:style="(index+1)%3===0?'width: calc(100% / 3 - 17px); margin-right:1px;':''"
v-for="(el,index) in itemArr" :key="index" @click="onClassify(el)">
<label class="name">{{el}}</label>
<i class="awsui-iconfont" style="font-size: 12px;" @click="deleteExceptPrice(index,el)">&#xe6fe;</i>
</span>
</ul>
<van-field class="tag-field" v-model="tagValue" placeholder="添加标签 最多10个">
<template #button>
<button class="button" @click="addExceptPrice"><span class="line"></span>添加</button>
</template>
</van-field>
</div>
</div>
<div class="footer">
<van-button type="default" @click="backHome">取消</van-button>
<van-button type="info" @click="onRelease">发布</van-button>
</div>
</div>
<knowDimension @dimensionBack="dimensionBack" :publishDimensionData="publishDimensionData" v-else></knowDimension>
<!--<van-notify v-model="notifyshow" type="success">-->
<!--<van-icon name="bell" style="margin-right: 4px;" />-->
<!--<span>通知内容</span>-->
<!--</van-notify>-->
</template>
<script>
import vanFieldSelect from '@/components/fieldSelect'
import knowDimension from '@/pages/know-dimension'
import awsuiAxios from "../awsuiAxios";
export default {
name: 'release-knowledge',
components: {
vanFieldSelect,
knowDimension
},
data() {
return {
val:'',
title:'',
id: '',
notifyshow:false,
showRelease:true,
publishDimensionNames: '',
publishDimensionIds:[],
publishPerm:"",
publishDimensionData:{},
classify: '',
classifyOption: ['AWS5产品线', 'AWS6产品线'],
list: [
{
id: 'release1',
schemaTitle: '文档类别',
attrList: [
{
id: 'wordClass',
attrTitle: '制度',
active: false
}
]
},
{
id: 'release2',
schemaTitle: '项目过程',
attrList: [
{
id: 'manage1',
attrTitle: '项目管理',
active: false
}
]
}
],
itemArr: [],
tagValue: '',
authority:true, //
datastyle:''
}
},
methods: {
backHome(){
window.history.back();
},
onDimension() {
this.showRelease = false;
},
dimensionBack(dimensionData,type){
this.showRelease = true;
if(type=='ok'){
let namesTmp = "";
this.publishDimensionData = dimensionData;
let tmpData = dimensionData;
let indx = 0;
if(Object.keys(tmpData).length>0){
for (let key of Object.keys(tmpData)) {
let item = tmpData[key];
if(indx==0){
this.publishPerm = item['publishPerm'];
}
this.publishDimensionIds.push(item['id']);
namesTmp+=item['name']+",";
indx++;
}
if(namesTmp.length>0){
this.publishDimensionNames = namesTmp.substring(0,namesTmp.length-1);
}
}else{
this.publishDimensionIds=[];
this.publishDimensionNames='';
}
}
},
clearData(itemTmp){
itemTmp.attrList.forEach((ob, index) => {
ob.active = false;
})
},
onClassify(el,itemTmp) {
if(!el.active){
if(itemTmp.showType==1){//
itemTmp.attrList.forEach((ob, index) => {
ob.active = false;
})
}
}
el.active = !el.active;
},
publishCardSchemaDiv(){
//
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_mobile_schema_attr_list_json"
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
that.list = r.data.data;
}
});
},
addExceptPrice() {
if(this.tagValue.trim()==''){
this.$toast({message: '请输入标签内容', overlay: true});
return false;
}else{
//
if(this.itemArr.length==10){
this.$toast({message: '添加标签 最多10个', overlay: true});
}else{
if (this.itemArr.length<10&&this.tagValue != ''&&!this.itemArr.includes(this.tagValue)) {
this.itemArr.push(this.tagValue)
}
}
this.tagValue = "";
}
},
deleteExceptPrice(index) {
//
this.itemArr.splice(index, 1)
},
onRelease() {
let that = this;
if(Object.keys(this.publishDimensionData).length==0){
this.$toast({message: '请选择要发布到的知识分类', overlay: true});
return false;
}
let tags = this.itemArr.join('@`@');
if (tags && tags != '') {
tags = '@`@' + tags + '@`@'; // 便SQL
}
let newschemaMetaData01=[];
let schemaMetaData2=[];
let isNull = false;
for(let k=0;k<this.list.length;k++){
let obj = this.list[k];
if(obj.showType==2){
let val = obj.value?obj.value:'';
if(obj.isNullable==0&&val.trim()==''){
this.$toast({message:'元数据['+obj.schemaTitle+']不允许为空', overlay: true});
return false;
}
schemaMetaData2[schemaMetaData2.length] = {
metaValue: val.trim(),
schemaId: obj.id
};
}else{
let attrList = obj.attrList;
let activeL = 0;
for(let j=0;j<attrList.length;j++){
let ob = attrList[j];
if(ob.active){
activeL++;
newschemaMetaData01.push({
attrId:ob.id,
schemaId:ob.schemaId
})
}
}
if(obj.isNullable==0&&activeL==''){
this.$toast({message:'元数据['+obj.schemaTitle+']不允许为空', overlay: true});
return false;
}
}
}
let schemaMetaData ={
'01': newschemaMetaData01, //
'2': schemaMetaData2
}
let cardIds = [];
cardIds.push(this.id);
if (this.publishPerm==='publish') {
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_publish_card",
publishCardIds: JSON.stringify(cardIds),
publishDimensionIds: JSON.stringify(this.publishDimensionIds),
schemaMetaData: encodeURIComponent(JSON.stringify(schemaMetaData)),
tags: encodeURIComponent(tags),
publishMemo: encodeURIComponent("")
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
that.$toast({message: r.data?r.data.desc:r.msg, overlay: true})
} else {
that.$toast({
message: '已发布',
overlay: true,
onClose(){
that.$router.push({
name: 'myknwl'
})
}
});
}
});
} else {
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_publish_card_process_start_mobile",
cardIds: JSON.stringify(cardIds),
dimensionId: this.publishDimensionIds[0],
schemaMetaData: encodeURIComponent(JSON.stringify(schemaMetaData)),
tags: encodeURIComponent(tags),
publishMemo: encodeURIComponent("")
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
that.$toast({message: r.data?r.data.desc:r.msg, overlay: true})
} else {
window.location.href=r.data.url;
}
});
}
}
},
mounted() {
this.$nextTick(() => {
this.dimensionValue = this.$route.params.dir
this.id = this.$route.params.id;
this.title = this.$route.params.name;
localStorage.setItem("publishhome",this.$route.params.type);
})
let hh = window.innerHeight-130;
this.datastyle = "height:"+hh+"px";
},
created(){
let publishf =localStorage.getItem("publishflag");
let publishhome =localStorage.getItem("publishhome");
if(publishf=="true"){
localStorage.setItem("publishflag",undefined);
localStorage.setItem("publishhome",undefined);
this.$router.push({
name: publishhome=="myknowledge"?'myknwl':"knwldir"
})
}
this.publishCardSchemaDiv();
},
watch: {}
}
</script>
<style scoped>
.release {
height: calc(100% - 64px);
overflow-y: auto;
}
.title {
width: 96%;
font-size: 16px;
color: #333;
line-height: 22px;
padding: 15px;
background: #F8F8F8;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
display: inline-block;
}
.knowlSelect {
font-size: 14px;
color: #000;
line-height: 19px;
padding: 7px 0 7px 7px;
border-top: 0.33px solid #e9e9e9;
border-bottom: 0.33px solid #e9e9e9;
}
.list, .tag {
padding: 0 15px;
width: calc(100% - 30px);
}
.list span, .list label {
display: inline-block;
}
.list li {
float: left;
padding: 12px 0 4px;
width: 100%;
position: relative;
border-bottom: 0.33px solid #e9e9e9;
}
.list li:not(:last-child) {
border-bottom: 0.33px solid #e9e9e9;
}
.list li .title, .tag .title {
font-size: 14px;
padding: 0;
background: none;
width: 100%;
line-height: 19px;
}
.list li .con, .tag .con {
padding: 12px 0 0;
position: relative;
float: left;
width: 100%;
}
.list li .con .classify, .tag .con .classify {
width: calc(100% / 3 - 16px - 10px);
height: 30px;
line-height: 16px;
padding: 5px 8px;
margin-right: 10px;
margin-bottom: 8px;
border-radius: 2px;
background: #F5F5F5;
float: left;
display: flex;
align-items: center;
text-align: center;
cursor: pointer;
}
.tag .con .classify {
height: auto;
line-height: 20px;
}
.list li .con .classify .name, .tag .con .classify .name {
float: left;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
width: 100%;
cursor: pointer;
}
.list li .con .classify:last-child {
margin-right: 0;
}
.tag {
clear: both;
padding: 8px 15px;
width: calc(100% - 30px);
}
.tag .title {
font-size: 14px;
line-height: 18px;
}
.tag .con {
padding: 12px 0 0;
}
.con .classActive {
background: #E1EFFF !important;
color: #1B6EC9;
}
.tag .tag-field {
padding: 3px 0 3px 10px;
border: 0.33px solid #e9e9e9;
font-size: 12px;
border-radius: 2px;
}
.tag .button {
border: none;
line-height: 20px;
height: 20px;
font-size: 12px;
background: none;
color: #4A90E2;
padding-right: 10px;
cursor: pointer;
display: flex;
}
.tag .button .line {
display: inline-block;
width: 1px;
height: 20px;
line-height: 20px;
background: #d6d6d6;
margin-right: 10px;
}
.footer {
padding: 12px;
position: fixed;
border-top: 0.33px solid #e9e9e9;
left: 0;
right: 0;
bottom: 0;
background: #fff;
z-index: 1;
text-align: center;
}
.footer .van-button {
height: 38px;
line-height: 38px;
width:40%;
border-radius: 2px;
padding: 0 !important;
margin: 0px 10px;
display: inline-block;
}
.classify .name{
font-size: 13px;
}
.required:before{
content: '*';
color: red;
}
.release-data{
overflow: hidden;
overflow-y: auto;
}
</style>

View File

@ -0,0 +1,576 @@
<template>
<div class="knwldir">
<van-search v-model="value" placeholder="请输入文件内容关键词" @allSearch="getDimensionCardList"/>
<div class="top" ref="top">
<span v-for="(item,index) in tablist" :key="index" >
<span class="tabname" :style="(index<(tablist.length-1)?'color: #378DEC;':'color: #333;')" @click="(index<(tablist.length-1)?backtop(item.id,item.parentHasPerm):'')">{{item.name}}</span>
<span v-show="index<(tablist.length-1)"> <i style="font-size: 12px" class="awsui-iconfont">&#xe717;</i> </span>
</span>
</div>
<div class="content" :style="contentH">
<div class="item">
<van-cell
is-link
v-for="(item, index) in list"
clickable
:key="index"
@click="onCell($event,item,index)"
>
<i class="awsui-iconfont" :style="item.hasPerm?'':'color:#c8c9cc;'" :class="{default:item.default}">&#58913;</i>{{item.name}}
</van-cell>
</div>
<div v-show="hasPerm&&list.length>0&&cardlist.length>0" class="divide"></div>
<div :style="heights" v-show="cardlist.length>0">
<ul class="list" :style="heights">
<van-list
v-model="loading"
:finished="finished"
@load="downLoad"
finished-text="没有更多了"
loading-text="加载中..."
:offset="offset"
>
<li v-for="(item,index) in cardlist" :key="index" @click="(isNeedBorrow&&item.createUser!=item.uid)?'':onDetail(item)">
<div class="left">
<div class="title">{{item.cardName}}</div>
<div class="description">
<label>
{{item.publishUsername}}
</label>
<label v-if="item.cardContext!=''" class="line">|</label>
<label>
{{item.publishTime}}
</label>
<label class="line">|</label>
<label>阅读(<font>{{item.readCount}}</font>
</label>
</div>
</div>
<div v-show="isDimensionManager||isNeedBorrow" class="right" @click.stop="openDialog(item)">
<i v-show="isNeedBorrow&&item.createUser!=item.uid" class="awsui-iconfont">&#xe878;</i>
<i v-show="!isNeedBorrow" class="awsui-iconfont" >&#xe611;</i>
</div>
</li>
</van-list>
</ul>
</div>
<van-loading v-show="initLoad" size="24" style="line-height: 120px;height: 120px;text-align: center"/>
<div v-show="!initLoad&&list.length==0&&cardlist.length==0">
<div class="con">
<div class="img">
<img src="../assets/no_content.png" alt="" style="width: 110px;">
</div>
<div class="text">暂无数据</div>
</div>
</div>
</div>
<van-dialog v-model="showDialog" show-cancel-button @confirm="handleDialog">
<span style="text-align: center;padding: 20px 0;display: inline-block;width: 100%;">{{dialogMsg}}</span>
</van-dialog>
<van-action-sheet v-model="showShare" :title="activeCardName">
<div class="content" style="width: 100%;padding: 20px 0px">
<div class="options_op" @click="editorFun">
<div class="icon"><i class="awsui-iconfont">&#xe622;</i></div>
<div class="label">编辑</div>
</div>
<div class="options_op" @click="publishFun">
<div class="icon" ><i class="awsui-iconfont">&#xe745;</i></div>
<div class="label">发布</div>
</div>
<div class="options_op" @click="unPublish">
<div class="icon"><i class="awsui-iconfont" style="color: red;">&#59126;</i></div>
<div class="label">取消发布</div>
</div>
<div class="options_op" @click="logData">
<div class="icon"><i class="awsui-iconfont">&#xe6de;</i></div>
<div class="label">日志</div>
</div>
</div>
</van-action-sheet>
</div>
</template>
<script>
import awsuiAxios from "../awsuiAxios";
export default {
name: 'sub-knwldir',
data() {
return {
contentH:"",
offset:10,
isLoadingData:false,
loading:false,
finished:false,
initLoad:true,//
curPage:0,
heights:"",
hasPerm:true,
value: '',
id: 0,
name: '',
list: [],
cardlist:[],
showShare:false,
tablist:[
{
name:"目录",
id:""
}
],
menuActiveId:"",
tabicon:">",
showDialog:false,
dialogMsg:"确认启动知识借阅流程吗?",
currentParentId:"",
activePublishId:"",
activeCardName:"",
cardId:'',
isDimensionManager:false,
isNeedBorrow:false //
}
},
methods:{
downLoad(){
setTimeout(()=>{
this.getDimensionCardList(this.currentParentId);
})
},
editorFun(){
localStorage.setItem("dimensionhasPerm",this.hasPerm);
localStorage.setItem("dimensionhasId",this.currentParentId);
localStorage.setItem("dimensionhasPath",JSON.stringify(this.tablist));
this.$router.push({
name: 'new-knowledge',
params: {
cardId: this.cardId,
dimensionId:this.currentParentId,
type:"editor"
}
})
},
publishFun(){
localStorage.setItem("dimensionhasPerm",this.hasPerm);
localStorage.setItem("dimensionhasId",this.currentParentId);
localStorage.setItem("dimensionhasPath",JSON.stringify(this.tablist));
let that = this;
that.publicCardId = this.cardId;
//
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_check_card_has_file",
cardIds:JSON.stringify([this.cardId])
},
}).then(function (r) {
that.loading = false;
if (r.result != "ok") {
that.$toast({message: r.msg, overlay: true});
} else {
that.$router.push({
name: 'release-knowledge',
params: {
id: that.publicCardId,
type:"myknowledge"
}
})
}
});
},
unPublish(){
let title = this.tablist[this.tablist.length-1]['name'];
this.dialogMsg="确认取消发布知识目录["+title+"]下的知识["+this.activeCardName+"]吗?";
this.showDialog =true;
this.showShare = false;
},
logData(){
localStorage.setItem("dimensionhasPerm",this.hasPerm);
localStorage.setItem("dimensionhasId",this.currentParentId);
localStorage.setItem("dimensionhasPath",JSON.stringify(this.tablist));
this.showShare = false;
this.$router.push({
name: 'knwlborrow',
params: {
id: this.cardId,
name:this.activeCardName,
}
})
},
onDetail(item){
localStorage.setItem("dimensionhasPerm",item.hasPerm);
localStorage.setItem("dimensionhasId",this.currentParentId);
localStorage.setItem("dimensionhasPath",JSON.stringify(this.tablist));
this.$router.push({
name: 'know-detail',
params: {
id: item.cardId,
dimensionId:this.currentParentId
}
})
},
onCell(event, item, index) {
if(item.id!=""){
this.currentParentId = item.id;
this.refreshData(item);
}
},
refreshData(item){
this.curPage=0;
this.getDimensionList(item.id);
this.hasPerm = item.hasPerm;
if(item.hasPerm){
this.getDimensionCardList(item.id);
}else{
this.cardlist=[];
}
},
backtop(parentId,parentHasPerm){
if(parentId==''){
localStorage.setItem("dimensionhasPerm",undefined);
localStorage.setItem("dimensionhasId",undefined);
localStorage.setItem("dimensionhasPath",undefined);
this.$router.push({
name: 'knwldir'
})
}else{
this.currentParentId =parentId;
this.hasPerm =parentHasPerm;
this.curPage=0;
this.getDimensionList(parentId);
if(parentHasPerm){
this.getDimensionCardList(parentId);
}else{
this.cardlist=[];
}
}
},
openDialog(item){
if(this.isNeedBorrow){
this.showDialog = true;
}else{
this.showShare = true;
}
this.cardId=item.cardId;
this.activeCardName=item.cardName;
this.activePublishId=item.publishId;
},
handleDialog(){
localStorage.setItem("dimensionhasPerm",this.hasPerm);
localStorage.setItem("dimensionhasId",this.currentParentId);
localStorage.setItem("dimensionhasPath",JSON.stringify(this.tablist));
//
let that = this;
if(!this.isNeedBorrow){
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_cancel_publish_card",
publishId:this.activePublishId,
},
}).then(function (r) {
if (r.result == "error") {
that.$toast({message: r.msg, overlay: true})
} else {
that.$toast({message: "取消发布成功", overlay: true});
let datas = that.cardlist;
for(let i=0;i<datas.length;i++){
if(datas[i]["publishId"]==that.activePublishId){
that.cardlist.splice(i, 1);
break;
}
}
}
})
}else{
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_borrow_card_process_start_mobile",
cardId:this.cardId,
dimensionId:this.currentParentId
},
}).then(function (r) {
if (r.result == "error") {
that.$toast({message: r.msg, overlay: true})
} else {
window.location.href=r.data.url;
}
})
}
},
getDimensionList(parentId){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_mobile_center_dimension_tree_json",
parentId:parentId==''?this.$route.params.id:parentId,
isDimensionKnwlPage:false
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
that.list = r.data.dimensionJA;
let parentid = r.data.parentId;
that.currentParentId = parentid;
let tmpd = that.tablist;
let indx = 0;
let has = false;
for(let n=0;n<tmpd.length;n++){
if( tmpd[n]['id']==parentid){
indx =n;
has = true;
break;
}
}
if(has){
that.tablist=that.tablist.slice(0,indx+1);
}else{
that.tablist.push({
name:r.data.parentLabel,
id:parentid,
parentHasPerm:that.hasPerm
})
}
let size = that.list.length;
if(size>0&&size<=4){
let hh = window.innerHeight-43*size-54-12-36;
that.heights = "height:"+hh+"px";
}else if(size>4){
let hh = window.innerHeight-43*4-54-12-36;
that.heights = "height:"+hh+"px";
}
}
});
},
getDimensionCardList(parentId){
let that = this;
if(this.curPage==0){
this.finished=false;
}
if(this.isLoadingData){
return;
}
this.isLoadingData = true;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_dimension_card_list_json",
dimensionId: parentId==''?this.$route.params.id:parentId,
curPage: this.curPage<=0?1:this.curPage+1,
rowsPerPage:0,
sortIndx: "publishTime",
sortDir: "down",
filter: encodeURIComponent(this.value)
},
}).then(function (r) {
that.initLoad = false;
that.loading = false;
that.isLoadingData = false;
if (r.result == "error") {
that.$toast({message: r.data?r.data.desc:r.msg, overlay: true});
} else {
let rowsPerPage = r.data.rowsPerPage;
if(that.curPage==0){
that.cardlist = r.data.data;
}else{
that.cardlist =that.cardlist.concat(r.data.data) ;
}
that.isNeedBorrow = r.data.isNeedBorrow;
that.isDimensionManager = r.data.isDimensionManager;
if(that.curPage*rowsPerPage>=r.data.totalRecords){
that.finished=true;
}
that.curPage = r.data.curPage;
}
that.contentH = "height:"+(window.innerHeight-54-that.$refs.top.clientHeight)+"px";
});
}
},
watch:{
value:function () {
this.curPage=0;
this.getDimensionCardList(this.currentParentId);
}
},
mounted() {
let dimendionId='';
this.contentH = "height:"+(window.innerHeight-90)+"px";
let tmphasPerm = this.$route.params.hasPerm;
if(tmphasPerm==undefined){
tmphasPerm= localStorage.getItem("dimensionhasPerm");
dimendionId = localStorage.getItem("dimensionhasId");
this.tablist = JSON.parse(localStorage.getItem("dimensionhasPath"));
}
this.getDimensionList(dimendionId);
if(tmphasPerm!=undefined){
this.hasPerm = tmphasPerm;
}
if(this.hasPerm ){
this.getDimensionCardList(dimendionId);
}
}
}
</script>
<style scoped>
.path_title{
color:#378DEC;
}
.knwldir {
height: 100%;
}
.knwldir .content {
border-top: 0.33px solid #e9e9e9;
height: calc(100% - 105px);
overflow-y: auto;
}
.knwldir .content .item {
padding: 0 12px;
background: #fff;
}
.knwldir .content .divide {
background: #e9e9e9;
width: 100%;
height: 12px;
}
.knwldir .content .van-cell {
padding: 8px 0;
/*border-bottom: 1px solid #efefef;*/
}
.knwldir .content .van-cell:last-child {
border-bottom: 0;
}
.knwldir .content .van-cell .awsui-iconfont {
color: #FABD01;
margin-right: 8px;
}
.knwldir .content .van-cell .default {
color: #CCCCCC;
}
.top {
padding: 9px 12px 7px;
line-height: 18px;
/*border-bottom: 0.33px solid #e9e9e9;*/
font-size: 12px;
}
.list li {
float: left;
padding: 11px 0;
width: 100%;
position: relative;
/*border-bottom: 0.33px solid #e9e9e9;*/
}
.list li:not(:last-child) {
border-top: 0.33px solid #e9e9e9;
}
.list li .left {
width: calc(100% - 20px);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
float: left;
}
.list li .left .title {
font-size: 13px;
color: #333;
line-height: 18px;
margin-bottom: 4px;
}
.list li .left .description {
color: #999999;
line-height: 15px;
font-size: 12px;
}
.list li .left .description .line {
display: inline-block;
margin: 0 8px;
color: #E8E8E8;
}
.list li .right {
width: 20px;
text-align: right;
float: right;
margin-top: 18px;
}
.list li .right .awsui-iconfont {
color: #a4a4a4;
}
.list {
padding: 0 12px;
float: left;
/*height: calc(100% - 86px);*/
/*overflow: hidden;*/
/*overflow-y: auto;*/
width: calc(100% - 24px);
}
.list span, .list label {
display: inline-block;
}
.top .tabname{
font-size: 14px;
}
.top .tabname:last-child{
color: #999 !important;
}
.con {
position: absolute;
width: 100%;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
text-align: center;
}
.con .img {
width: 125px;
height: 125px;
margin: 0 auto;
}
.con .text {
color: #999;
line-height: 20px;
font-size: 13px;
width: 100%;
}
.options_op{
width: 25%;
display: inline-block;
text-align: center;
}
.options_op .icon{
font-size: 16px;
margin-bottom: 10px;
}
.options_op .label{
font-size: 12px;
}
</style>

View File

@ -0,0 +1,231 @@
<template>
<div class="knwldir">
<van-search v-model="value" placeholder="请输入文件内容关键词" @allSearch="getDimensionCardList"/>
<div class="content">
<div class="top">
<span v-html="tabPath"></span>
</div>
<div class="item">
<van-cell v-for="(item,index) in list" :key="index" is-link :to="{name:'knwlborrow', params: {id:item.id,path:(path+'>'+item.name)}}">
<i class="awsui-iconfont" :class="item.default">&#58913;</i>{{item.name}}
</van-cell>
</div>
<div class="divide"></div>
<ul class="list">
<li v-for="(item,index) in cardlist" :key="index" @click="showDialog = true">
<div class="left">
<div class="title">{{item.cardName}}</div>
<div class="description">
<label>
{{item.publishUsername}}
</label>
<label v-if="item.cardContext!=''" class="line">|</label>
<label>
{{item.publishTime}}
</label>
<label class="line">|</label>
<label>阅读次数
<font>{{item.readCount}}</font>
</label>
<label class="line">|</label>
<label>级别
<font>{{item.rdoSL}}</font>
</label>
</div>
</div>
<div class="right">
<i class="awsui-iconfont">&#xe878;</i>
</div>
</li>
</ul>
</div>
</div>
</template>
<script>
import awsuiAxios from "../awsuiAxios";
export default {
name: 'sub-knwldir1',
data() {
return {
value: '',
id: 0,
name: '',
list: [],
path:"",
tabPath:""
}
},
methods:{
getDimensionList(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_mobile_center_dimension_tree_json",
parentId:this.$route.params.id,
isDimensionKnwlPage:false
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
that.list = r.data.dimensionJA;
}
});
},
getDimensionCardList(){
let that = this;
awsuiAxios.post({
url: "jd",
data: {
cmd: "com.actionsoft.apps.kms_knwl_center_dimension_card_list_json",
dimensionId: this.$route.params.id,
curPage: 1,
rowsPerPage: 50,
sortIndx: "publishTime",
sortDir: "down",
filter: encodeURIComponent(this.value)
},
}).then(function (r) {
that.loading = false;
if (r.result == "error") {
alert(r.msg);
} else {
that.list = r.data.data;
}
});
},
},
created() {
let path1 = this.$route.params.path.split(">");
let pathName = `<span style="color:#378DEC;">知识目录</span>` ;
let path1L = path1.length;
for(let i=0;i<path1L;i++){
if(i<path1L-1){
pathName+='&gt;'+'<span style="color:#378DEC;">'+path1[i]+'</span>';
}else{
pathName+='&gt;'+path1[i];
}
}
this.name= pathName;
this.path=this.$route.params.path;
this.getDimensionList();
}
}
</script>
<style scoped>
.path_title{
color:#378DEC;
}
.knwldir {
height: 100%;
}
.knwldir .content {
border-top: 0.33px solid #e9e9e9;
height: calc(100% - 105px);
overflow-y: auto;
}
.knwldir .content .item {
padding: 0 12px;
background: #fff;
}
.knwldir .content .divide {
background: #e9e9e9;
width: 100%;
height: 12px;
}
.knwldir .content .van-cell {
padding: 8px 0;
border-bottom: 1px solid #efefef;
}
.knwldir .content .van-cell:last-child {
border-bottom: 0;
}
.knwldir .content .van-cell .awsui-iconfont {
color: #03A76B;
margin-right: 8px;
}
.knwldir .content .van-cell .default {
color: #CCCCCC;
}
.top {
padding: 9px 12px 7px;
line-height: 18px;
border-bottom: 0.33px solid #e9e9e9;
font-size: 12px;
}
.list li {
float: left;
padding: 11px 0;
width: 100%;
position: relative;
border-bottom: 0.33px solid #e9e9e9;
}
.list li:not(:last-child) {
border-bottom: 0.33px solid #e9e9e9;
}
.list li .left {
width: calc(100% - 20px);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
float: left;
}
.list li .left .title {
font-size: 13px;
color: #333;
line-height: 18px;
margin-bottom: 4px;
}
.list li .left .description {
color: #999999;
line-height: 15px;
font-size: 12px;
}
.list li .left .description .line {
display: inline-block;
margin: 0 8px;
color: #E8E8E8;
}
.list li .right {
width: 20px;
text-align: right;
float: right;
margin-top: 18px;
}
.list li .right .awsui-iconfont {
color: #a4a4a4;
}
.list {
padding: 0 12px;
float: left;
height: calc(100% - 86px);
overflow-y: auto;
width: calc(100% - 24px);
}
.list span, .list label {
display: inline-block;
}
</style>

View File

@ -0,0 +1,167 @@
import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '../store'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'knwlhome',
component: function (res) {
require(['@/pages/knwlhome'], res)
},
meta: {
title: '知识库'
}
},
{
path: '/know-detail',
name: 'know-detail',
component: function (res) {
require(['@/pages/know-detail'], res)
},
meta: {
title: '知识详情'
}
},
{
path: '/knwldir',
name: 'knwldir',
component: function (res) {
require(['@/pages/knwldir'], res)
},
meta: {
title: '目录'
}
},
{
path: '/sub-knwldir/:id',
name: 'sub-knwldir',
component: function (res) {
require(['@/pages/sub-knwldir'], res)
},
meta: {
title: '知识目录'
}
},
{
path: '/sub-knwldir1/:id',
name: 'sub-knwldir1',
component: function (res) {
require(['@/pages/sub-knwldir1'], res)
},
meta: {
title: '知识目录'
}
},
{
path: '/knwlborrow/:id',
name: 'knwlborrow',
component: function (res) {
require(['@/pages/knwlborrow'], res)
},
meta: {
title: '知识目录'
}
},
{
path: '/borrow-apply',
name: 'borrow-apply',
component: function (res) {
require(['@/pages/borrow-apply'], res)
},
meta: {
title: '借阅申请'
}
},
{
path: '/borrow-approve',
name: 'borrow-approve',
component: function (res) {
require(['@/pages/borrow-approve'], res)
},
meta: {
title: '借阅审批'
}
},
{
path: '/myknwl',
name: 'myknwl',
component: function (res) {
require(['@/pages/myknwl'], res)
},
meta: {
title: '我的'
}
},
{
path: '/new-knowledge',
name: 'new-knowledge',
component: function (res) {
require(['@/pages/new-knowledge'], res)
},
meta: {
title: '新建知识'
}
},
{
path: '/release-knowledge',
name: 'release-knowledge',
component: function (res) {
require(['@/pages/release-knowledge'], res)
},
meta: {
title: '发布知识'
}
},
{
path: '/know-dimension',
name: 'know-dimension',
component: function (res) {
require(['@/pages/know-dimension'], res)
},
meta: {
title: '知识维度'
}
},
{
path: '/devGetSession',
name: 'devGetSession',
component: () => import('../views/DevGetSession.vue')
}
]
const router = new VueRouter({
routes
})
/**
*
* to 表示将要跳转到的组件 (目标组件)
* console.log(from); //(源组件)
* next();
* next 是一个函数
* next() 进入下一个组件的钩子函数
* next(false) 阻止跳转 中断导航
* next("/login") 进入指定的组件的钩子函数
*/
// 路由守卫
router.beforeEach((to, from, next) => {
if (production === false && store.state.sessionId == null && to.path != "/devGetSession") {
//进入一个路由获取session获取session后再进入主入口
next("/devGetSession");
} else {
//跳转前设置title
//window.document.title = to.meta.title;
next();
}
//to.matched.some(res=>{res.meta.isLogin}) 能够获取路由配置的参数
});
//跳转后设置scroll为原点
router.afterEach((to, from, next) => {
window.scrollTo(0, 0);
});
export default router

View File

@ -0,0 +1,21 @@
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
sessionId: settingParam.sessionId
},
mutations: {
edit(state, data) {
for (let p in data) {
state[p] = data[p];
}
}
},
actions: {
},
modules: {
}
})

View File

@ -0,0 +1,40 @@
<template>
<div class="devGetSession">
正在获取session
</div>
</template>
<script>
import router from "../router/index";
import awsuiAxios from "../awsuiAxios/index";
import store from "../store/index";
awsuiAxios
.post({
url: "jd",
data: {
userid: devUserInfo.userid,
pwd: devUserInfo.pwd,
lang: "cn",
cmd: "com.actionsoft.apps.getsession.get",
deviceType: "mobile",
},
})
.then(function (r) {
// let r = response.data;
if (r.result == "error") {
//$.simpleAlert(r.msg, "error");
alert("获取session错误" + r.msg);
} else {
store.commit("edit", { sessionId: r.data.sid });
router.replace("/");
}
});
export default {
data() {
return {
dwList: [], //dw
};
},
methods: {},
mounted() {},
};
</script>