Merge branch 'hi-ucs-dev' into release

This commit is contained in:
wuhongjian 2023-01-05 09:24:07 +08:00
commit f576ece322
73 changed files with 3638 additions and 2541 deletions

View File

@ -1,8 +1,8 @@
/* /*
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2022-08-25 14:37:49 * @Date: 2022-08-25 14:37:49
* @LastEditors: Light * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-11-24 09:10:10 * @LastEditTime: 2023-01-05 09:23:47
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
*/ */
var _global = {} var _global = {}

View File

@ -1,29 +1,37 @@
<template> <template>
<div> <div>
<el-dialog :visible.sync="addOrUpdateVisibleCopy" :title="modalTypeText[modalType]" @close="closeModal" <el-dialog custom-class="customClass" :visible.sync="cityVisibleCopy" :title="modalTypeText[modalType]"
:close-on-click-modal="false" :close-on-press-escape="false"> @close="closeModal" :close-on-click-modal="false" :close-on-press-escape="false">
<div class="first-title"> <div class="left">
填写字段 <div class="left-process">
<!-- <el-steps direction="vertical" :active="activeStep">
<el-step :key=index v-for="(item, index) in steps" :title=item @click.native="handleStep(index)"></el-step>
</el-steps> -->
<div class="li1" v-for="(item, index) in steps" :key="index" @click="handleStep(item, index)">
<div v-if="index == activeStepIndex">
<div class="node node1">{{ item.name }}</div>
<div class="borderLeft borderLeft1"></div>
</div>
<div v-else>
<div class="node">{{ item.name }}</div>
<div class="borderLeft"></div>
</div>
<div class="advice"></div>
</div> </div>
<el-checkbox-group v-model="checkList" @change="changeBtn" style="margin-bottom: 20px">
<el-checkbox-button v-for="(item) in btnList" :label="item" :key="item">{{ item }}
</el-checkbox-button>
</el-checkbox-group>
<!-- 挂载和修改--> </div>
<div key="1"> </div>
<!-- 挂载和修改 -->
<div class="right">
<el-form :model="dataForm" :rules="rules" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" <el-form :model="dataForm" :rules="rules" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()"
:label-width="$i18n.locale === 'en-US' ? '120px' : 'auto'"> :label-width="$i18n.locale === 'en-US' ? '150px' : '130px'">
<!-- 基本信息 --> <!-- 基本信息 -->
<div style="margin-bottom:20px" v-show="checkList.includes('基本信息')"> <div class="scrollBox" id="anchor1">
<div style=" <div class="baseTitle">
text-align: center;
font-weight: 600;
font-size: 18px;
margin-bottom: 10px;
">
基本信息 基本信息
</div> </div>
<div class="baseInner">
<el-form-item label="融合服务名称" prop="name"> <el-form-item label="融合服务名称" prop="name">
<el-input class="input-box" v-model="dataForm.name" placeholder="请输入融合服务名称"></el-input> <el-input class="input-box" v-model="dataForm.name" placeholder="请输入融合服务名称"></el-input>
</el-form-item> </el-form-item>
@ -37,22 +45,29 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="图片"> <el-form-item label="图片:">
<el-upload ref="editUpload" class="upload-demo" :action="fileUploadUrl" <el-upload ref="editUpload" class="upload-demo" :action="fileUploadUrl"
:on-success="eidtHandleAvatarSuccess" :before-upload="editBeforeAvatarUpload" :limit="1" :file-list="[]" :on-success="eidtHandleAvatarSuccess" :before-upload="editBeforeAvatarUpload" :limit="1"
:on-remove="editUploadRemoveFile" :on-exceed="handleExceed" list-type="picture"> :file-list="[]" :on-remove="editUploadRemoveFile" :on-exceed="handleExceed" list-type="picture">
<el-button size="small" type="primary" class="button-new">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传图片文件</div> <div slot="tip" class="el-upload__tip">只能上传图片文件</div>
<div class="button-new">
<div>点击上传</div>
</div>
<img v-if="imageUrl" :src="imageUrl" class="avatar" /> <img v-if="imageUrl" :src="imageUrl" class="avatar" />
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</div> </div>
</div>
<!-- 组合能力 --> <!-- 组合能力 -->
<div class="" style="marigin-bottom:40px" v-show="checkList.includes('组合能力')"> <div class="scrollBox" id="anchor2">
<div class="title"> <div class="baseTitle">
组合能力 组合能力
</div> </div>
<div class="baseInner">
<!-- <scene-one-input :dataForm="dataForm" title="场景痛点" @update="updateDataForm" ref="scenePainDom"
:keyTextObj="painKeyTextObj"></scene-one-input> -->
<InfrastructureModal v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="基础设施" <InfrastructureModal v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="基础设施"
:modalType="modalType" ref="jcssDom"></InfrastructureModal> :modalType="modalType" ref="jcssDom"></InfrastructureModal>
<el-form-item label="基础设施总数" > <el-form-item label="基础设施总数" >
@ -69,59 +84,128 @@
<el-input v-model="dataForm.componentCount" placeholder="请输入组件服务总数"></el-input> <el-input v-model="dataForm.componentCount" placeholder="请输入组件服务总数"></el-input>
</el-form-item> </el-form-item>
</div> </div>
</div>
</el-form> </el-form>
</div> </div>
<template slot="footer"> <template slot="footer">
<el-button type="primary" @click="dataFormSubmitHandle()">提交</el-button>
<el-button @click="closeModal">{{ $t("cancel") }}</el-button> <el-button @click="closeModal">{{ $t("cancel") }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{
$t("confirm")
}}</el-button>
</template> </template>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import debounce from "lodash/debounce"; import debounce from 'lodash/debounce'
import qs from "qs";
import CommonQuestion from './components/common-question.vue';
import IntegratedCombineAbility from './components/integrated-combine-ability.vue';
import CombineAbility from './components/combine-ability.vue';
import Cookies from 'js-cookie'
import { tableColumns } from './IntegratedServices.vue';
import { getFuseResourceList, getListParams, modalTypeText } from "./assignedScene/add-update-scene.vue";
import InfrastructureModal from './assignedScene/components/infrastructure-modal.vue' import InfrastructureModal from './assignedScene/components/infrastructure-modal.vue'
import CombineAbility from './components/combine-ability.vue'
import { getFuseResourceList, getListParams } from './assignedScene/add-update-scene.vue'
import qs from 'qs'
// import SceneUseStep from './components/scene-use-step.vue'
// import SceneOneInput from './components/scene-one-input.vue'
// import AbilityAdd from './components/ability-add.vue'
// import CombineAbility from '../components/combine-ability.vue'
// import CommonQuestion from '../components/common-question.vue'
// import InfrastructureModal from './components/infrastructure-modal.vue'
// import Cookies from 'js-cookie'
// import upload from '@/views/modules/components/upload'
export const getDescJson = (text) => {
return {
descObj: {
text: `${text}描述`,
key: 'description'
}
}
}
//
export const modalTypeText = {
add: '场景挂接',
update: '场景修改'
}
export default { export default {
components: { components: {
CommonQuestion,
IntegratedCombineAbility,
CombineAbility, CombineAbility,
InfrastructureModal, InfrastructureModal
// SceneUseStep,
// CombineAbility,
// SceneOneInput,
// upload,
// CommonQuestion,
// InfrastructureModal,
// AbilityAdd
}, },
data() { watch: {
return {
fileUploadUrl: window.SITE_CONFIG.apiURL + '/upload',
dataForm: { dataForm: {
"infrastructureCount":null, handler (newVal) {
"dataSourceCount":null, this.dataForm = newVal
"componentCount":null,
"name": "",
"applicationArea": "",
"description": "",
"fuseAttrList": [
{
"attrType": "服务图片",
"attrValue": "",
}, },
deep: true,
immediate: true
},
cityVisible: {
handler (newVal) {
this.cityVisible = newVal
if (this.modalType == 'add' && newVal) {
this.getDetail(this.dataForm)
}
},
immediate: true
}
},
props: {
modalType: {
type: String,
default: 'add'
},
cityVisible: {
type: Boolean,
default: false
}
},
data () {
return {
domArr: [],
scrollTop: 0,
selectNow: '',
areaList: [],
activeStepIndex: 0, //
activeStepIndexs: 0,
baseTypeList: [{ value: '视频资源', label: '视频资源' }, { value: '云资源', label: '云资源' }, { value: '其他', label: '其他' }],
componetTypeList: [{ value: '智能算法', label: '智能算法' }, { value: ' 图层服务', label: ' 图层服务' },
{ value: '开发组件', label: '开发组件' }, { value: '业务组件', label: '业务组件' }],
dataTypeList: [{ value: '数据', label: '数据' }],
sceneAreas: [], //
steps: [{ name: '基本信息', id: 'anchor1' },
{ name: '组合能力', id: 'anchor2' }],
fileUploadUrl: window.SITE_CONFIG.apiURL + '/upload',
painKeyTextObj: getDescJson('痛点'),
solutionKeyTextObj: getDescJson('方案'),
dataForm: {
infrastructureCount: null,
dataSourceCount: null,
componentCount: null,
name: '',
applicationArea: '',
description: '',
fuseAttrList: [
{
attrType: '服务图片',
attrValue: ''
}
], ],
// //
"fuseResourceList": [ fuseResourceList: [
{ {
"resourceId": 0, resourceId: 0,
"sequence": "" sequence: ''
} }
], ],
type: '打包模式' type: '打包模式'
@ -130,225 +214,432 @@ export default {
name: [ name: [
{ {
required: true, required: true,
message: "请输入融合服务名称", message: '请输入名称',
trigger: "change", trigger: 'change'
}, }
], ],
description: [ description: [
{ {
required: true, required: true,
message: "请输入融合服务描述", message: '请输入描述',
trigger: "change", trigger: 'change'
}
]
}, },
], checkList: ['基本信息', '场景痛点', '解决方案', '使用能力', '构建步骤'],
}, cityVisibleCopy: this.cityVisible,
btnList: ['基本信息', '组合能力'], displayInfo: {
checkList: ['基本信息', '组合能力'], name: '名称',
areaList: [], description: '描述'
addOrUpdateVisibleCopy: this.addOrUpdateVisible,
displayInfo: tableColumns,
getListParams: getListParams,
refsParseArray: {
'zjfwDom': '组件服务',
'sjzyDom': '数据资源',
'jcssDom': '基础设施',
}, },
modalTypeText: modalTypeText, modalTypeText: modalTypeText,
getListParams: getListParams,
refsParseArray: {
zjfwDom: '组件服务',
sjzyDom: '数据资源',
jcssDom: '基础设施'
},
abilityListObj: {}, abilityListObj: {},
imgData: [],
// //
handleExceed() { handleExceed () {
this.$message({ type: 'error', message: '最多支持一张图片上传' }) this.$message({ type: 'error', message: '最多支持一张图片上传' })
}, },
imageUrl: '' imageUrl: ''
};
},
props: {
modalType: {
type: String,
default: 'add'
},
addOrUpdateVisible: {
type: Boolean,
default: false
} }
}, },
watch: {
dataForm: {
handler(newVal) {
this.dataForm = newVal
},
deep: true,
immediate: true,
},
addOrUpdateVisible: {
handler(newVal) {
this.addOrUpdateVisibleCopy = newVal;
if (this.modalType == 'add' && newVal) {
this.getDetail(this.dataForm)
}
},
immediate: true,
},
},
mounted() {
//
this.getAreaInfo()
},
methods: { methods: {
clearForm() {
this.$refs.dataForm && this.$refs.dataForm.resetFields(); handleStep (item, index) {
this.activeStepIndex = index
this.selectNow = item.id //
const top = document.querySelector('#' + item.id).offsetTop - 100
document.querySelectorAll('.customClass .el-dialog__body')[0].scrollTop = top
}, },
closeModal() { //
this.$emit('closeModal') getSceneArea () {
},
//
getAreaInfo() {
const params = { const params = {
page: 1, topCategoryName: '应用资源'
limit: 99,
dictTypeId: "1513712507692818433",
};
this.$http
.get("/sys/dict/data/page" + "?" + qs.stringify(params))
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} }
res.data.list.map((item) => { this.$http
this.areaList.push({ .get('/category/getAllFilterCriteriaByTopCategory/', {
label: item.dictLabel, params
value: item.dictLabel })
}); .then((res) => {
}); this.sceneAreas = res.data.data[0].typeList
}).catch(err => {
this.$message.error(err);
}) })
}, },
clearForm () {
this.$refs.dataForm && this.$refs.dataForm.resetFields()
},
closeModal () {
this.$emit('closeModal')
},
// //
updateDataForm(data) { updateDataForm (data) {
if (Object.keys(this.getListParams).includes(data.title)) { if (Object.keys(this.getListParams).includes(data.title)) {
this.abilityListObj[data.title] = data.list; this.abilityListObj[data.title] = data.list
} }
}, },
getFuseResourceList() { //
return getFuseResourceList(this.abilityListObj) updateCount (data) {
if (data.title === '基础设施') {
this.dataForm.infrastructureCount = data.count
}
if (data.title === '组件服务') {
this.dataForm.componentCount = data.count
}
if (data.title === '数据资源') {
this.dataForm.dataSourceCount = data.count
}
}, },
// getFuseResourceList () {
changeBtn(data) { return getFuseResourceList(this.abilityListObj)
this.checkList = data;
}, },
// //
dataFormSubmitHandle: debounce( dataFormSubmitHandle: debounce(
function () { function () {
this.$refs.dataForm.validate((valid) => { this.$refs.dataForm.validate((valid) => {
if (!valid) { if (!valid) {
this.$message.error("请检查表单是否填写完整"); this.$message.error('请检查表单是否填写完整')
return false; return false
} }
let methodsObj = { const methodsObj = {
'add': 'post', add: 'post',
'update': 'put' update: 'put'
} }
this.dataForm.fuseResourceList = this.getFuseResourceList() this.dataForm.fuseResourceList = this.getFuseResourceList()
if (this.imageUrl == '') { if (this.imageUrl == '') {
this.$message.error("请上传图片!"); this.$message.error('请上传图片!')
return; return
} }
this.dataForm.fuseAttrList.find(v => v.attrType == '服务图片').attrValue = this.imageUrl || ''; this.dataForm.fuseAttrList.find(v => v.attrType == '服务图片').attrValue = this.imageUrl || ''
this.$http this.$http
[methodsObj[this.modalType]]("/fuse", this.dataForm) [methodsObj[this.modalType]]('/fuse', this.dataForm)
.then(({ data: res }) => { .then(({ data: res }) => {
if (res.code !== 0) { if (res.code !== 0) {
return this.$message.error(res.msg); return this.$message.error(res.msg)
} }
this.$message({ this.$message({
message: this.$t("prompt.success"), message: this.$t('prompt.success'),
type: "success", type: 'success',
duration: 500, duration: 500,
onClose: () => { onClose: () => {
this.$refs.dataForm && this.$refs.dataForm.resetFields(); this.$refs.dataForm && this.$refs.dataForm.resetFields()
this.$emit("refreshDataList"); this.$emit('refreshDataList')
this.$emit("closeModal"); this.$emit('closeModal')
}, }
}); })
}) })
.catch((err) => { .catch((err) => {
this.$message.error(err) this.$message.error(err)
}); })
}); })
}, },
1000, 1000,
{ leading: true, trailing: false } { leading: true, trailing: false }
), ),
// //
getDetail(data) { getDetail (data) {
this.dataForm = data; this.dataForm = data
this.$nextTick(() => { this.$nextTick(() => {
for (const key in this.refsParseArray) { for (const key in this.refsParseArray) {
console.log('11111111111', data)
this.$refs[key] && this.$refs[key].getDataInfo && this.$refs[key].getDataInfo(data) this.$refs[key] && this.$refs[key].getDataInfo && this.$refs[key].getDataInfo(data)
} }
let _imgObj = data.fuseAttrList.find(v => v.attrType == '服务图片') || {}; const _imgObj = data.fuseAttrList.find(v => v.attrType == '服务图片') || {}
this.imageUrl = _imgObj.attrValue; this.imageUrl = _imgObj.attrValue
// //
Object.keys(this.getListParams).map(k => { Object.keys(this.getListParams).map(k => {
let arr = data.fuseResourceList.filter(v => v.type == k); const arr = data.fuseResourceList.filter(v => v.type == k)
let arr2 = []; const arr2 = []
arr.map(v => { arr.map(v => {
arr2.push(v.resourceId) arr2.push(v.resourceId)
}) })
this.abilityListObj[k] = arr2 this.abilityListObj[k] = arr2
}) })
console.log('this.dataForm----详情-------->', this.dataForm); console.log('this.dataForm----详情-------->', this.dataForm)
}) })
}, },
beforeAvatarUpload(file) { //
const isImage = getAreaInfo () {
file.type === 'image/jpeg' || const params = {
file.type === 'image/jpg' || page: 1,
file.type === 'image/png' limit: 99,
dictTypeId: '1513712507692818433'
if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!')
} }
return isImage this.$http
}, .get('/sys/dict/data/page' + '?' + qs.stringify(params))
addUploadRemoveFile(file, fileList) { .then(({ data: res }) => {
this.$refs.addUpload.clearFiles() if (res.code !== 0) {
this.imageUrl = '' return this.$message.error(res.msg)
},
editBeforeAvatarUpload(file) {
const isImage =
file.type === 'image/jpeg' ||
file.type === 'image/jpg' ||
file.type === 'image/png'
if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!')
} }
return isImage res.data.list.map((item) => {
this.areaList.push({
label: item.dictLabel,
value: item.dictLabel
})
})
}).catch(err => {
this.$message.error(err)
})
}, },
editUploadRemoveFile(file, fileList) { handleAvatarSuccess (res, file) {
this.$refs.editUpload.clearFiles()
this.imageUrl = ''
},
eidtHandleAvatarSuccess(res, file) {
if (res.code !== 0) { if (res.code !== 0) {
return this.$message.error(res.msg) return this.$message.error(res.msg)
} }
this.imageUrl = res.data this.imageUrl = res.data
}, },
beforeAvatarUpload (file) {
const isImage =
file.type === 'image/jpeg' ||
file.type === 'image/jpg' ||
file.type === 'image/png'
if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!')
}
return isImage
}, },
beforeDestroy() { addUploadRemoveFile (file, fileList) {
this.$refs.addUpload.clearFiles()
this.imageUrl = ''
},
editBeforeAvatarUpload (file) {
const isImage =
file.type === 'image/jpeg' ||
file.type === 'image/jpg' ||
file.type === 'image/png'
if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!')
}
return isImage
},
editUploadRemoveFile (file, fileList) {
this.$refs.editUpload.clearFiles()
this.imageUrl = ''
},
eidtHandleAvatarSuccess (res, file) {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.imageUrl = res.data
}
},
mounted () {
//
this.getAreaInfo()
const that = this
this.$nextTick(() => {
document.querySelector('.el-dialog__body').onscroll = function () {
const top = document.querySelectorAll('.customClass .el-dialog__body')[0].scrollTop - 100
if (top < document.querySelector('#anchor1').offsetTop - 100) {
that.activeStepIndexs = 0
} else if (top < document.querySelector('#anchor2').offsetTop - 100) {
that.activeStepIndexs = 1
} else {
that.activeStepIndexs = 0
}
if (that.activeStepIndex !== that.activeStepIndexs) {
that.activeStepIndex = that.activeStepIndexs
that.$forceUpdate()
}
}
})
},
beforeDestroy () {
this.clearForm() this.clearForm()
}, }
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.fixed {
position: sticky;
z-index: 10012;
top: 0;
left: 50%;
margin-left: -9.56rem;
}
.button-new {
height: 90px;
width: 128px;
border: 1px dashed rgba(198, 198, 198, 0.5);
border-radius: 2px;
background: #e9eff8;
color: #666666;
font-size: 14px;
margin-right: 8px;
}
.button-new div {
background: url('~@/assets/img/uploadAdd.png') no-repeat;
color: #666666;
background-position: center;
text-align: center;
height: 90px;
padding-top: 41px;
background-position-y: 22px;
}
.left {
width: 135px;
height: 650px;
position: fixed;
background: rgba(244, 245, 248, 0.8);
.left-process {
height: 300px;
position: fixed;
padding-left: 18px;
padding-top: 24px;
.li1 {
list-style: none;
box-sizing: border-box;
padding-left: 20px;
position: relative;
}
.borderLeft {
width: 1px;
height: 100%;
background-color: #1160e2;
position: absolute;
top: 11.225px;
bottom: 0;
left: -1px;
}
.borderLeft1 {
background-color: #1160e2;
;
}
.node::before {
z-index: 1;
content: "";
background-color: #fff;
border: 1px solid #1160e2;
width: 12px;
height: 12px;
color: #fff;
position: absolute;
border-radius: 50%;
left: 0;
top: 11.225px;
transform: translate(-50%, -50%);
}
.node {
cursor: pointer;
font-size: 16px;
line-height: 22.5px;
font-weight: 500;
color: #212121;
}
.node1 {
color: #0058e1;
}
.node1::before {
width: 16px;
height: 16px;
background-color: #fff;
border-radius: 50%;
border: 4px solid #1160e2;
}
.advice {
font-size: 10px;
color: #1160e2;
padding-bottom: 46px;
}
.li1:last-child .borderLeft {
display: none;
}
}
}
.right {
width: 770px;
margin-left: 157px;
margin-top: -5px;
.info-inner {
margin-left: 10px;
margin-right: 10px;
}
.info-title {
font-size: 14px;
font-weight: bold;
}
.baseInfo {
border-radius: 2px;
}
.baseTitle {
padding-left: 20px;
color: #212121;
font-size: 16px;
margin-bottom: 10px;
margin-top: 32px;
background: url("~@/assets/img/biaoti.png") no-repeat;
background-position-y: 2px;
}
.baseInner {
background: rgba(244, 245, 248, 0.8);
padding: 24px 120px;
}
.baseInner1 {
background: rgba(244, 245, 248, 0.8);
padding: 24px 24px;
}
}
::v-deep .el-dialog__header {
background: #0058e1;
// height: 50px;
}
::v-deep .el-dialog__title {
line-height: 18px;
font-size: 18px;
color: #fff;
}
::v-deep .el-upload {
display: inline-flex;
}
::v-deep .el-dialog__body { ::v-deep .el-dialog__body {
padding: 0px;
height: 580px; height: 580px;
overflow: auto; overflow: auto;
} }
.icon-input ::v-deep .el-input__inner { .icon-input ::v-deep .el-input__inner {
@ -379,7 +670,7 @@ export default {
} }
</style> </style>
<style lang="scss"> <style lang="scss" scoped>
.mod-sys__menu { .mod-sys__menu {
.menu-list, .menu-list,
@ -448,19 +739,14 @@ export default {
line-height: 32px; line-height: 32px;
} }
.input-box { .title {
width: 90%;
}
.first-title {
text-align: center; text-align: center;
font-weight: 600; font-weight: 600;
font-size: 18px; font-size: 18px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.title { .first-title {
text-align: center; text-align: center;
font-weight: 600; font-weight: 600;
font-size: 18px; font-size: 18px;

View File

@ -0,0 +1,474 @@
<template>
<div>
<el-dialog :visible.sync="addOrUpdateVisibleCopy" :title="modalTypeText[modalType]" @close="closeModal"
:close-on-click-modal="false" :close-on-press-escape="false">
<div class="first-title">
填写字段
</div>
<el-checkbox-group v-model="checkList" @change="changeBtn" style="margin-bottom: 20px">
<el-checkbox-button v-for="(item) in btnList" :label="item" :key="item">{{ item }}
</el-checkbox-button>
</el-checkbox-group>
<!-- 挂载和修改-->
<div key="1">
<el-form :model="dataForm" :rules="rules" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()"
:label-width="$i18n.locale === 'en-US' ? '120px' : 'auto'">
<!-- 基本信息 -->
<div style="margin-bottom:20px" v-show="checkList.includes('基本信息')">
<div style="
text-align: center;
font-weight: 600;
font-size: 18px;
margin-bottom: 10px;
">
基本信息
</div>
<el-form-item label="融合服务名称" prop="name">
<el-input class="input-box" v-model="dataForm.name" placeholder="请输入融合服务名称"></el-input>
</el-form-item>
<el-form-item label="融合服务描述" prop="description">
<el-input type="textarea" :rows="3" class="input-box" v-model="dataForm.description"
placeholder="请输入融合服务描述"></el-input>
</el-form-item>
<el-form-item label="应用领域" prop="applicationArea">
<el-select v-model="dataForm.applicationArea" placeholder="请选择应用领域" filterable>
<el-option v-for="item in areaList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="图片">
<el-upload ref="editUpload" class="upload-demo" :action="fileUploadUrl"
:on-success="eidtHandleAvatarSuccess" :before-upload="editBeforeAvatarUpload" :limit="1" :file-list="[]"
:on-remove="editUploadRemoveFile" :on-exceed="handleExceed" list-type="picture">
<el-button size="small" type="primary" class="button-new">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传图片文件</div>
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
</el-upload>
</el-form-item>
</div>
<!-- 组合能力 -->
<div class="" style="marigin-bottom:40px" v-show="checkList.includes('组合能力')">
<div class="title">
组合能力
</div>
<InfrastructureModal v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="基础设施"
:modalType="modalType" ref="jcssDom"></InfrastructureModal>
<el-form-item label="基础设施总数" >
<el-input v-model="dataForm.infrastructureCount" onkeyup="value=value.replace(/[^\d]/g,0)" placeholder="请输入基础设施总数"></el-input>
</el-form-item>
<combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="数据资源" ref="sjzyDom"
:getDataParams="getListParams['数据资源']"></combine-ability>
<el-form-item label="数据资源总数" >
<el-input v-model="dataForm.dataSourceCount" onkeyup="value=value.replace(/[^\d]/g,0)" placeholder="请输入数据资源总数"></el-input>
</el-form-item>
<combine-ability v-model="dataForm" :dataForm="dataForm" @update="updateDataForm" type="组件服务" ref="zjfwDom"
:getDataParams="getListParams['组件服务']"></combine-ability>
<el-form-item label="组件服务总数" >
<el-input v-model="dataForm.componentCount" placeholder="请输入组件服务总数"></el-input>
</el-form-item>
</div>
</el-form>
</div>
<template slot="footer">
<el-button @click="closeModal">{{ $t("cancel") }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{
$t("confirm")
}}</el-button>
</template>
</el-dialog>
</div>
</template>
<script>
import debounce from 'lodash/debounce'
import qs from 'qs'
import CommonQuestion from './components/common-question.vue'
import IntegratedCombineAbility from './components/integrated-combine-ability.vue'
import CombineAbility from './components/combine-ability.vue'
import Cookies from 'js-cookie'
import { tableColumns } from './IntegratedServices.vue'
import { getFuseResourceList, getListParams, modalTypeText } from './assignedScene/add-update-scene.vue'
import InfrastructureModal from './assignedScene/components/infrastructure-modal.vue'
export default {
components: {
CommonQuestion,
IntegratedCombineAbility,
CombineAbility,
InfrastructureModal
},
data () {
return {
fileUploadUrl: window.SITE_CONFIG.apiURL + '/upload',
dataForm: {
infrastructureCount: null,
dataSourceCount: null,
componentCount: null,
name: '',
applicationArea: '',
description: '',
fuseAttrList: [
{
attrType: '服务图片',
attrValue: ''
}
],
//
fuseResourceList: [
{
resourceId: 0,
sequence: ''
}
],
type: '打包模式'
},
rules: {
name: [
{
required: true,
message: '请输入融合服务名称',
trigger: 'change'
}
],
description: [
{
required: true,
message: '请输入融合服务描述',
trigger: 'change'
}
]
},
btnList: ['基本信息', '组合能力'],
checkList: ['基本信息', '组合能力'],
areaList: [],
addOrUpdateVisibleCopy: this.addOrUpdateVisible,
displayInfo: tableColumns,
getListParams: getListParams,
refsParseArray: {
zjfwDom: '组件服务',
sjzyDom: '数据资源',
jcssDom: '基础设施'
},
modalTypeText: modalTypeText,
abilityListObj: {},
//
handleExceed () {
this.$message({ type: 'error', message: '最多支持一张图片上传' })
},
imageUrl: ''
}
},
props: {
modalType: {
type: String,
default: 'add'
},
addOrUpdateVisible: {
type: Boolean,
default: false
}
},
watch: {
dataForm: {
handler (newVal) {
this.dataForm = newVal
},
deep: true,
immediate: true
},
addOrUpdateVisible: {
handler (newVal) {
this.addOrUpdateVisibleCopy = newVal
if (this.modalType == 'add' && newVal) {
this.getDetail(this.dataForm)
}
},
immediate: true
}
},
mounted () {
//
this.getAreaInfo()
},
methods: {
clearForm () {
this.$refs.dataForm && this.$refs.dataForm.resetFields()
},
closeModal () {
this.$emit('closeModal')
},
//
getAreaInfo () {
const params = {
page: 1,
limit: 99,
dictTypeId: '1513712507692818433'
}
this.$http
.get('/sys/dict/data/page' + '?' + qs.stringify(params))
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
res.data.list.map((item) => {
this.areaList.push({
label: item.dictLabel,
value: item.dictLabel
})
})
}).catch(err => {
this.$message.error(err)
})
},
//
updateDataForm (data) {
if (Object.keys(this.getListParams).includes(data.title)) {
this.abilityListObj[data.title] = data.list
}
},
getFuseResourceList () {
return getFuseResourceList(this.abilityListObj)
},
//
changeBtn (data) {
this.checkList = data
},
//
dataFormSubmitHandle: debounce(
function () {
this.$refs.dataForm.validate((valid) => {
if (!valid) {
this.$message.error('请检查表单是否填写完整')
return false
}
const methodsObj = {
add: 'post',
update: 'put'
}
this.dataForm.fuseResourceList = this.getFuseResourceList()
if (this.imageUrl == '') {
this.$message.error('请上传图片!')
return
}
this.dataForm.fuseAttrList.find(v => v.attrType == '服务图片').attrValue = this.imageUrl || ''
this.$http
[methodsObj[this.modalType]]('/fuse', this.dataForm)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.$refs.dataForm && this.$refs.dataForm.resetFields()
this.$emit('refreshDataList')
this.$emit('closeModal')
}
})
})
.catch((err) => {
this.$message.error(err)
})
})
},
1000,
{ leading: true, trailing: false }
),
//
getDetail (data) {
this.dataForm = data
this.$nextTick(() => {
for (const key in this.refsParseArray) {
this.$refs[key] && this.$refs[key].getDataInfo && this.$refs[key].getDataInfo(data)
}
const _imgObj = data.fuseAttrList.find(v => v.attrType == '服务图片') || {}
this.imageUrl = _imgObj.attrValue
//
Object.keys(this.getListParams).map(k => {
const arr = data.fuseResourceList.filter(v => v.type == k)
const arr2 = []
arr.map(v => {
arr2.push(v.resourceId)
})
this.abilityListObj[k] = arr2
})
console.log('this.dataForm----详情-------->', this.dataForm)
})
},
beforeAvatarUpload (file) {
const isImage =
file.type === 'image/jpeg' ||
file.type === 'image/jpg' ||
file.type === 'image/png'
if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!')
}
return isImage
},
addUploadRemoveFile (file, fileList) {
this.$refs.addUpload.clearFiles()
this.imageUrl = ''
},
editBeforeAvatarUpload (file) {
const isImage =
file.type === 'image/jpeg' ||
file.type === 'image/jpg' ||
file.type === 'image/png'
if (!isImage) {
this.$message.error('上传头像图片只能是 jpg/png 格式!')
}
return isImage
},
editUploadRemoveFile (file, fileList) {
this.$refs.editUpload.clearFiles()
this.imageUrl = ''
},
eidtHandleAvatarSuccess (res, file) {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.imageUrl = res.data
}
},
beforeDestroy () {
this.clearForm()
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-dialog__body {
height: 580px;
overflow: auto;
}
.icon-input ::v-deep .el-input__inner {
cursor: pointer;
}
.detial-form ::v-deep {
.el-form-item {
margin-bottom: 0px;
line-height: 32px;
}
.el-form-item__label {
line-height: 32px;
}
.el-form-item__content {
line-height: 32px;
}
}
::v-deep .el-checkbox-button__inner {
width: 130px;
margin: 0 10px 5px;
border-left: unset !important;
border-radius: unset !important;
border: 1px solid #dcdfe6 !important;
}
</style>
<style lang="scss">
.mod-sys__menu {
.menu-list,
.icon-list {
.el-input__inner,
.el-input__suffix {
cursor: pointer;
}
}
&-icon-popover {
width: 458px;
overflow: hidden;
}
&-icon-inner {
width: 478px;
max-height: 258px;
overflow-x: hidden;
overflow-y: auto;
}
&-icon-list {
width: 458px;
padding: 0;
margin: -8px 0 0 -8px;
>.el-button {
padding: 8px;
margin: 8px 0 0 8px;
>span {
display: inline-block;
vertical-align: middle;
width: 18px;
height: 18px;
font-size: 18px;
}
}
}
}
.previewImg {
position: fixed;
z-index: 9999;
}
.name {
text-align: right;
vertical-align: middle;
font-size: 14px;
color: #606266;
line-height: 40px;
padding: 0 12px 0 0;
-webkit-box-sizing: border-box;
box-sizing: border-box;
line-height: 32px;
width: 120px;
}
.text {
margin-left: 132px;
font-size: 14px;
color: #606266;
line-height: 32px;
}
.input-box {
width: 90%;
}
.first-title {
text-align: center;
font-weight: 600;
font-size: 18px;
margin-bottom: 10px;
}
.title {
text-align: center;
font-weight: 600;
font-size: 18px;
margin-bottom: 10px;
}
.avatar {
height: 100px;
width: 100px;
display: block;
}
</style>

View File

@ -38,10 +38,9 @@
layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle" layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle"> @current-change="pageCurrentChangeHandle">
</el-pagination> </el-pagination>
<!-- 弹窗, 新增 / 修改 --> <!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="query" @closeModal="closeModal" <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="query" @closeModal="closeModal"
:addOrUpdateVisible="addOrUpdateVisible" :modalType="modalType"> :cityVisible="addOrUpdateVisible" :addOrUpdateVisible="addOrUpdateVisible" :modalType="modalType">
</add-or-update> </add-or-update>
</div> </div>
@ -49,50 +48,51 @@
</template> </template>
<script> <script>
import mixinViewModule from "@/mixins/view-module"; import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from "./IntegratedServices-add"; import AddOrUpdate from './IntegratedServices-add'
import qs from "qs"; // import AddOrUpdate from './IntegratedServices-add_back'
import { type } from "os"; import qs from 'qs'
import { type } from 'os'
export const tableColumns = { export const tableColumns = {
'name': '名称', name: '名称',
'description': '描述', description: '描述',
'applicationArea': '应用领域', applicationArea: '应用领域'
} }
export default { export default {
mixins: [mixinViewModule], mixins: [mixinViewModule],
data() { data () {
return { return {
// -- // --
tableColumns: tableColumns, tableColumns: tableColumns,
tableData: [], tableData: [],
mixinViewModuleOptions: { mixinViewModuleOptions: {
getDataListURL: "/fuse/page", getDataListURL: '/fuse/page',
exportURL: "/ability/bsabilityai/export", exportURL: '/ability/bsabilityai/export',
deleteURL: "/fuse/delete", deleteURL: '/fuse/delete',
getDataListIsPage: true, getDataListIsPage: true,
deleteIsBatch: false, deleteIsBatch: false
}, },
dataForm: { dataForm: {
name: "", name: '',
order: 'desc', order: 'desc',
orderField: 'create_date', orderField: 'create_date',
type: '打包模式' type: '打包模式'
}, },
qp: false, qp: false,
modalType: 'add', modalType: 'add'
}; }
}, },
components: { components: {
AddOrUpdate, AddOrUpdate
}, },
mounted() { mounted () {
window.addEventListener("resize", this.a); window.addEventListener('resize', this.a)
this.fullScreen(); this.fullScreen()
}, },
methods: { methods: {
deleteRow(id) { deleteRow (id) {
this.$confirm('确认是否删除?', '提示', { this.$confirm('确认是否删除?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
@ -103,50 +103,50 @@ export default {
}).then(res => { }).then(res => {
console.log('删除成功', res) console.log('删除成功', res)
if (res.data.code !== 0) { if (res.data.code !== 0) {
return this.$message.error(res.msg); return this.$message.error(res.msg)
} }
this.$message({ this.$message({
message: '删除成功', message: '删除成功',
type: "success", type: 'success',
duration: 500, duration: 500,
onClose: () => { onClose: () => {
this.query() this.query()
}, }
}); })
}).catch(err => { }).catch(err => {
this.$message.error(err); this.$message.error(err)
}) })
}).catch(() => { }).catch(() => {
}); })
}, },
// //
searchData() { searchData () {
this.query() this.query()
}, },
// //
reset() { reset () {
this.dataForm.name = ""; this.dataForm.name = ''
this.query() this.query()
}, },
// //
handleUpdate(val) { handleUpdate (val) {
this.addOrUpdateVisible = true; this.addOrUpdateVisible = true
this.modalType = 'update'; this.modalType = 'update'
const cloneVal = JSON.parse(JSON.stringify(val)) const cloneVal = JSON.parse(JSON.stringify(val))
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.addOrUpdate.getDetail(cloneVal) this.$refs.addOrUpdate.getDetail(cloneVal)
}) })
}, },
// //
addServe() { addServe () {
this.addOrUpdateVisible = true this.addOrUpdateVisible = true
this.modalType = 'add'; this.modalType = 'add'
}, },
closeModal() { closeModal () {
this.addOrUpdateVisible = false; this.addOrUpdateVisible = false
}, },
// //
showDetail(val) { showDetail (val) {
// window.open(window.SITE_CONFIG.previewUrl + '#/packagingDetails?id=' + val.id) // window.open(window.SITE_CONFIG.previewUrl + '#/packagingDetails?id=' + val.id)
window.open(window.SITE_CONFIG.previewUrl + '#/integrationServicesDetails?id=' + val.id) window.open(window.SITE_CONFIG.previewUrl + '#/integrationServicesDetails?id=' + val.id)
}, },
@ -157,28 +157,28 @@ export default {
// "_blank" // "_blank"
// ); // );
// }, // },
fullScreen() { fullScreen () {
if (window.outerHeight === screen.availHeight) { if (window.outerHeight === screen.availHeight) {
if (window.outerWidth === screen.availWidth) { if (window.outerWidth === screen.availWidth) {
console.log( console.log(
"全屏1", '全屏1'
); )
this.qp = false; this.qp = false
} else { } else {
console.log( console.log(
"不是全屏2", '不是全屏2'
); )
this.qp = true; this.qp = true
} }
} else { } else {
console.log( console.log(
"不是全屏3", '不是全屏3'
); )
this.qp = true; this.qp = true
} }
}, }
}, }
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.el-tooltip__popper { .el-tooltip__popper {

View File

@ -21,7 +21,7 @@
<el-form-item label="赋能领域:" prop="unit"> <el-form-item label="赋能领域:" prop="unit">
<el-select v-model="dataForm.applicationArea" placeholder="请选择"> <el-select v-model="dataForm.applicationArea" placeholder="请选择">
<el-option v-for="item in sceneAreas" :key="item.data" :label="item.dict_label" <el-option v-for="item in sceneAreas" :key="item.data" :label="item.dict_label"
:value="item.dict_value"></el-option> :value="item.dict_label"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="场景名称:" prop="name"> <el-form-item label="场景名称:" prop="name">

View File

@ -36,7 +36,7 @@
<el-form-item label="赋能领域:" prop="unit"> <el-form-item label="赋能领域:" prop="unit">
<el-select v-model="dataForm.applicationArea" placeholder="请选择"> <el-select v-model="dataForm.applicationArea" placeholder="请选择">
<el-option v-for="item in sceneAreas" :key="item.data" :label="item.dict_label" <el-option v-for="item in sceneAreas" :key="item.data" :label="item.dict_label"
:value="item.dict_value"></el-option> :value="item.dict_label"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="场景名称:" prop="name"> <el-form-item label="场景名称:" prop="name">

View File

@ -80,14 +80,13 @@
}}</el-button> }}</el-button>
</template> </template>
</el-dialog> </el-dialog>
<DisplayList :displayList="displayList" showKey="channelName"></DisplayList> <DisplayList :displayList="displayList" showKey="channelName"></DisplayList>
</div> </div>
</template> </template>
<script> <script>
import InfrastructureTree from './infrastructure-tree.vue' import InfrastructureTree from './infrastructure-tree.vue'
import DisplayList from './display-list.vue'; import DisplayList from './display-list.vue'
export default { export default {
components: { components: {
@ -102,17 +101,17 @@ export default {
}, },
type: { type: {
type: String, type: String,
default: "基础设施" default: '基础设施'
}, },
modalType: { modalType: {
type: String, type: String,
default: 'add' default: 'add'
} }
}, },
data() { data () {
const getYunList = () => { const getYunList = () => {
let yunList = ['云主机', '算力主机', '对象存储', '堡垒机', '防火墙', '网闸', '负载均衡', '公网IP']; const yunList = ['云主机', '算力主机', '对象存储', '堡垒机', '防火墙', '网闸', '负载均衡', '公网IP']
let arr = [] const arr = []
yunList.map(v => arr.push({ labelCode: v, labelName: v })) yunList.map(v => arr.push({ labelCode: v, labelName: v }))
return arr return arr
} }
@ -124,9 +123,9 @@ export default {
displayList: [], // list displayList: [], // list
btnList: ['视频资源', '云资源', '感知资源'], btnList: ['视频资源', '云资源', '感知资源'],
showText: { showText: {
'视频资源': '视频标签', 视频资源: '视频标签',
'云资源': '云资源分类', 云资源: '云资源分类',
'感知资源': '感知资源分类', 感知资源: '感知资源分类'
}, },
tabData: [ tabData: [
{ {
@ -140,13 +139,13 @@ export default {
{ {
tabName: '感知资源', tabName: '感知资源',
list: [] list: []
}, }
], ],
currentList: [], currentList: [],
dataListLoading: false, dataListLoading: false,
dataList: [], dataList: [],
pageData: { pageData: {
total: 0, total: 0
}, },
cameraName: '', cameraName: '',
postData: {}, postData: {},
@ -162,7 +161,7 @@ export default {
} }
}, },
watch: { watch: {
async showModal(newVal) { async showModal (newVal) {
if (newVal) { if (newVal) {
// //
this.$nextTick(() => { this.$nextTick(() => {
@ -174,14 +173,14 @@ export default {
} }
} }
}, },
mounted() { mounted () {
// //
this.getVideoBtn() this.getVideoBtn()
}, },
methods: { methods: {
selectCheckbox() { selectCheckbox () {
if (this.selectedArray.length > 0) { if (this.selectedArray.length > 0) {
let list = [] const list = []
this.dataList.forEach((item) => { this.dataList.forEach((item) => {
this.selectedArray.forEach(val => { this.selectedArray.forEach(val => {
if (val === item.idtCameraChannel) { if (val === item.idtCameraChannel) {
@ -196,85 +195,84 @@ export default {
} }
} }
}, },
showAction() { showAction () {
this.showModal = true; this.showModal = true
}, },
// //
async getDataInfo(dataForm) { async getDataInfo (dataForm) {
this.modalType == 'edit' this.modalType == 'edit'
this.dataFormCopy = dataForm; this.dataFormCopy = dataForm
await this.getVideoBtn(); await this.getVideoBtn()
let arr = []; const arr = []
let attrValue = dataForm.fuseResourceList.filter(v => v.type == this.type); const attrValue = dataForm.fuseResourceList.filter(v => v.type == this.type)
if (attrValue.length > 0) { if (attrValue.length > 0) {
attrValue.map(val => { attrValue.map(val => {
let _obj = Object.assign({}, val, val.resource) const _obj = Object.assign({}, val, val.resource)
arr.push(_obj); arr.push(_obj)
}); })
} }
// //
this.displayList = JSON.parse(JSON.stringify(arr)); this.displayList = JSON.parse(JSON.stringify(arr))
// //
this.selectedArray = arr.map(v => v.idtCameraChannel); this.selectedArray = arr.map(v => v.idtCameraChannel)
this.selectedArrayCopy = JSON.parse(JSON.stringify(arr)); this.selectedArrayCopy = JSON.parse(JSON.stringify(arr))
this.dataList = JSON.parse(JSON.stringify(arr)); this.dataList = JSON.parse(JSON.stringify(arr))
this.pageData.total = arr.length; this.pageData.total = arr.length
// //
this.$nextTick(() => { this.$nextTick(() => {
this.selectCheckbox() this.selectCheckbox()
}) })
}, },
// //
dataListSelectionChangeHandle(data) { dataListSelectionChangeHandle (data) {
this.selectedArray = data; this.selectedArray = data
}, },
pageCurrentChangeHandle(pageNum) { pageCurrentChangeHandle (pageNum) {
this.searchData.pageNum = pageNum; this.searchData.pageNum = pageNum
this.getData() this.getData()
}, },
pageSizeChangeHandle(pageSize) { pageSizeChangeHandle (pageSize) {
this.searchData.pageSize = pageSize; this.searchData.pageSize = pageSize
this.getData() this.getData()
}, },
changeBtn(btn) { changeBtn (btn) {
this.activeBtn = btn; this.activeBtn = btn
this.currentList = this.tabData.find(v => v.tabName == btn).list || []; this.currentList = this.tabData.find(v => v.tabName == btn).list || []
this.checkList = []; this.checkList = []
this.searchData.cameraName = ''; this.searchData.cameraName = ''
this.getData() this.getData()
}, },
// //
getVideoBtn() { getVideoBtn () {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.$http.get('/api/project/selectAllLabel', {}).then(res => { this.$http.get('/api/project/selectAllLabel', {}).then(res => {
resolve(res) resolve(res)
if (res.data.code !== 1) { if (res.data.code !== 1) {
return this.$message.error(res.msg); return this.$message.error(res.msg)
} }
this.tabData[0].list = res.data.data || []; this.tabData[0].list = res.data.data || []
this.$nextTick(() => { this.$nextTick(() => {
this.currentList = this.tabData.find(v => v.tabName == this.activeBtn).list || []; this.currentList = this.tabData.find(v => v.tabName == this.activeBtn).list || []
if (this.modalType == 'add') { if (this.modalType == 'add') {
this.clear() this.clear()
} }
}) })
}).catch(err => { }).catch(err => {
reject(err) reject(err)
this.$message.error(err); this.$message.error(err)
}) })
}) })
}, },
// - // -
clearVideo() { clearVideo () {
this.checkList = [] this.checkList = []
this.getData() this.getData()
}, },
// //
changeVideoBtn(item) { changeVideoBtn (item) {
let _index = this.checkList.findIndex(v => item.labelCode == v) const _index = this.checkList.findIndex(v => item.labelCode == v)
if (_index > -1) { if (_index > -1) {
this.checkList.splice(_index, 1) this.checkList.splice(_index, 1)
} else { } else {
@ -285,74 +283,73 @@ export default {
}) })
}, },
// //
getData() { getData () {
let postData = Object.assign({}, { const postData = Object.assign({}, {
checkStatus: 1, checkStatus: 1,
gpsX: '', gpsX: '',
gpsY: '', gpsY: '',
radius: '', radius: '',
labelCodes: this.checkList.join(), labelCodes: this.checkList.join()
}, this.searchData); }, this.searchData)
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.$http.get('/api/project/selectByParentIdNew', { params: postData }).then(res => { this.$http.get('/api/project/selectByParentIdNew', { params: postData }).then(res => {
resolve(res) resolve(res)
if (res.data.code !== 1) { if (res.data.code !== 1) {
return this.$message.error(res.msg); return this.$message.error(res.msg)
} }
this.dataList = res.data.data || [] this.dataList = res.data.data || []
this.pageData.total = res.data.count || 0; this.pageData.total = res.data.count || 0
}).catch(err => { }).catch(err => {
reject(err) reject(err)
this.$message.error(err); this.$message.error(err)
}) })
}) })
}, },
changeParentId(parentId) { changeParentId (parentId) {
this.searchData.parentId = parentId; this.searchData.parentId = parentId
this.getData(parentId) this.getData(parentId)
}, },
clearSelectArray() { clearSelectArray () {
this.selectedArrayCopy = [] this.selectedArrayCopy = []
this.selectedArray = [] this.selectedArray = []
this.getData() this.getData()
}, },
confirmSubmitHandle() { confirmSubmitHandle () {
// //
let idtCameraChannelArray = this.selectedArray.map(v => v.idtCameraChannel) const idtCameraChannelArray = this.selectedArray.map(v => v.idtCameraChannel)
// //
let newIdArray = this.selectedArrayCopy.map(v => v.idtCameraChannel) const newIdArray = this.selectedArrayCopy.map(v => v.idtCameraChannel)
let idArray = [...new Set(newIdArray.concat(idtCameraChannelArray))] const idArray = [...new Set(newIdArray.concat(idtCameraChannelArray))]
if (idArray.length > this.maxNum) { if (idArray.length > this.maxNum) {
return this.$message.error('最多选择十条数据!'); return this.$message.error('最多选择十条数据!')
} }
let listArray = [].concat(this.selectedArrayCopy, this.dataList); const listArray = [].concat(this.selectedArrayCopy, this.dataList)
this.displayList = []; this.displayList = []
idArray.map(v => { idArray.map(v => {
let obj = listArray.find(k => k.idtCameraChannel === v) const obj = listArray.find(k => k.idtCameraChannel === v)
if (obj) { if (obj) {
this.displayList.push({ this.displayList.push({
channelName: obj.channelName channelName: obj.channelName
}) })
} }
}) })
this.$emit('update', { this.$emit('update', {
title: this.type, title: this.type,
list: idArray, list: idArray
}) })
this.showModal = false; this.showModal = false
}, },
close() { close () {
this.showModal = false; this.showModal = false
this.searchData.cameraName = '' this.searchData.cameraName = ''
// this.selectedArray = []; // this.selectedArray = [];
this.$emit('closeModal'); this.$emit('closeModal')
}, },
clear() { clear () {
this.changeBtn('视频资源') this.changeBtn('视频资源')
}, }
} }
} }

View File

@ -167,9 +167,9 @@
<el-button type="text" size="small" @click="showDetail(scope.row)" <el-button type="text" size="small" @click="showDetail(scope.row)"
>详情</el-button >详情</el-button
> >
<el-button type="text" size="small" @click="showDocument(scope.row)" <!-- <el-button type="text" size="small" @click="showDocument(scope.row)"
>技术文档</el-button >技术文档</el-button
> > -->
<el-button <el-button
type="text" type="text"
size="small" size="small"

View File

@ -155,9 +155,9 @@
<el-button type="text" size="small" @click="showDetail(scope.row)" <el-button type="text" size="small" @click="showDetail(scope.row)"
>详情</el-button >详情</el-button
> >
<el-button type="text" size="small" @click="showDocument(scope.row)" <!-- <el-button type="text" size="small" @click="showDocument(scope.row)"
>技术文档</el-button >技术文档</el-button
> > -->
<el-button <el-button
type="text" type="text"
size="small" size="small"

View File

@ -79,7 +79,7 @@ export default {
} }
], ],
tableData: [], tableData: [],
maxSize: { y: 195 }, maxSize: { y: 235 },
loadingDynamic: false, loadingDynamic: false,
loadingTable: false loadingTable: false
} }
@ -170,6 +170,7 @@ export default {
font-size: 16px; font-size: 16px;
color: #212121; color: #212121;
text-align: center; text-align: center;
box-shadow: 2px 2px 5px #ccc;
} }
.container { .container {
background: #fff; background: #fff;
@ -177,6 +178,7 @@ export default {
height: 335px; height: 335px;
padding: 0px 0 0 10px; padding: 0px 0 0 10px;
box-sizing: border-box; box-sizing: border-box;
box-shadow: 2px 2px 5px #ccc;
} }
} }
@ -256,6 +258,10 @@ export default {
::v-deep .ant-table-thead { ::v-deep .ant-table-thead {
background-color: #f4f5f8; background-color: #f4f5f8;
} }
::v-deep .ant-table-header{
margin-right: -17px;
}
::v-deep .ant-table-body::-webkit-scrollbar{width:0;}
</style> </style>
<style lang="scss"> <style lang="scss">
.testTooltip { .testTooltip {

View File

@ -1,8 +1,8 @@
<!-- <!--
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2022-07-05 12:53:03 * @Date: 2022-07-05 12:53:03
* @LastEditors: hisense.wuhongjian * @LastEditors: Light
* @LastEditTime: 2022-08-26 10:24:16 * @LastEditTime: 2022-12-30 10:07:30
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
--> -->
<template> <template>
@ -35,5 +35,9 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
&>div{
box-shadow: 2px 2px 5px #ccc;
}
} }
</style> </style>

View File

@ -211,6 +211,7 @@ export default {
.num { .num {
font-size: 30px; font-size: 30px;
font-weight: 600;
} }
.unit { .unit {

View File

@ -69,7 +69,6 @@ export default {
days.unshift(valueItem) // days.unshift(valueItem) //
} }
return days return days
}, },
@ -88,7 +87,6 @@ export default {
endDate: this.endDate endDate: this.endDate
}, },
(res) => { (res) => {
if (res.data.data && res.data.data.length > 0) { if (res.data.data && res.data.data.length > 0) {
this.data = res.data.data[0].values this.data = res.data.data[0].values
this.data.map((item) => { this.data.map((item) => {
@ -106,7 +104,7 @@ export default {
} else { } else {
this.trendChartData = { this.trendChartData = {
xaxis: this.ydata, xaxis: this.ydata,
ydata:this.xaxis ydata: this.xaxis
} }
} }

View File

@ -73,13 +73,13 @@ export default {
}, },
// //
resourceData: [], resourceData: [],
resourceColor: ['#7b2cff', '#fd5151' , '#2ca1ff', '#0adbfa', '#febe13', '#65e5dd', '#f071ff', '#85f67a'], resourceColor: ['#fe845e', '#0058e1', '#48c6c7', '#48c760', '#9c78ed', '#ff9999', '#d5c438', '#ff3e55'],
// //
applyData: [], applyData: [],
applyColor: ['#5085f2', '#e75fc3', '#f87be2', '#f2719a', '#fca4bb', '#f59a8f', '#fdb301', '#57e7ec', '#cf9ef1'], applyColor: ['#fe845e', '#0058e1', '#48c6c7', '#48c760', '#9c78ed', '#ff9999', '#d5c438', '#ff3e55'],
// //
requireData: [], requireData: [],
requireColor: ['#FD866A', '#9E87FF', '#58D5FF', '#73DDFF', '#73ACFF', '#FDD56A', '#FDB36A'], requireColor: ['#fe845e', '#0058e1', '#48c6c7', '#48c760', '#9c78ed', '#ff9999', '#d5c438', '#ff3e55'],
loadingToDo: false, loadingToDo: false,
loadingHasToDo: false, loadingHasToDo: false,
loadingResource: false, loadingResource: false,
@ -252,12 +252,20 @@ export default {
width: 836px; width: 836px;
background: #fff; background: #fff;
margin-right: 16px; margin-right: 16px;
box-shadow: 2px 2px 5px #ccc;
} }
.dept-chart-box { .dept-chart-box {
width: 780px; width: 780px;
height: 100%; height: 100%;
background: #fff; background: #fff;
box-shadow: 2px 2px 5px #ccc;
&>div{
border-left: 1px solid rgba($color: #d0d4de, $alpha: 0.5);
}
&>div:nth-of-type(1){
border: none;
}
} }
} }
</style> </style>

View File

@ -2,7 +2,7 @@
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2020-07-07 16:03:23 * @Date: 2020-07-07 16:03:23
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-12-29 17:34:17 * @LastEditTime: 2023-01-05 09:23:54
* @Description: 系统静态参数配置 * @Description: 系统静态参数配置
*/ */
var _global = {} var _global = {}

View File

@ -2,7 +2,7 @@
* @Author: hisense.wuhongjian * @Author: hisense.wuhongjian
* @Date: 2022-05-06 11:12:00 * @Date: 2022-05-06 11:12:00
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-12-29 17:34:24 * @LastEditTime: 2023-01-05 09:24:02
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
--> -->
<template> <template>
@ -94,6 +94,7 @@
// realName = res.data.data.realName // realName = res.data.data.realName
// } // }
realName = store.getters['user/realName'] realName = store.getters['user/realName']
console.log('真实姓名', realName)
if (realName.length > 13) { if (realName.length > 13) {
onWholeWaterMark( onWholeWaterMark(
[realName, moment().format('YYYY-MM-DD')], [realName, moment().format('YYYY-MM-DD')],
@ -148,6 +149,7 @@
// if (newValue == '/home') { // if (newValue == '/home') {
// waterMarkInit(newValue) // waterMarkInit(newValue)
// } // }
waterMarkInit()
changeWaterMark(newValue) changeWaterMark(newValue)
}, },
{ immediate: true } { immediate: true }

View File

@ -588,3 +588,11 @@ export function sysnoticemanagement(params) {
params, params,
}) })
} }
//
export function getRegion(params) {
return request({
url: '/sys/region/list/',
method: 'get',
params,
})
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 470 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

View File

@ -56,7 +56,7 @@
</div> </div>
<div class="volume_box"> <div class="volume_box">
<div class="fugai"></div> <!-- <div class="fugai"></div> -->
<div <div
v-for="(item, index) in dataLists" v-for="(item, index) in dataLists"
:key="item" :key="item"
@ -201,20 +201,20 @@
}) })
} }
let photoBg = ref([ let photoBg = ref([
require('../../../assets/abilityStatistics/yingyongziyuan-bg.png'), require('../../../assets/abilityStatistics/yyzy-bg.png'),
require('../../../assets/abilityStatistics/zhishiku-bg.png'), require('../../../assets/abilityStatistics/kfzj-bg.png'),
require('../../../assets/abilityStatistics/zujianfuwu-bg.png'), require('../../../assets/abilityStatistics/ywzj-bg.png'),
require('../../../assets/abilityStatistics/shujuziyuan-bg.png'), require('../../../assets/abilityStatistics/tcfw-bg.png'),
require('../../../assets/abilityStatistics/jichujianshe-bg.png'), require('../../../assets/abilityStatistics/znsf-bg.png'),
require('../../../assets/abilityStatistics/yingyongziyuan-bg.png'), require('../../../assets/abilityStatistics/hkt-bg.png'),
]) ])
let photo = ref([ let photo = ref([
require('../../../assets/abilityStatistics/yingyongziyuan.png'), require('../../../assets/abilityStatistics/yyzy.png'),
require('../../../assets/abilityStatistics/zhishiku.png'), require('../../../assets/abilityStatistics/kfzj.png'),
require('../../../assets/abilityStatistics/zujianfuwu.png'), require('../../../assets/abilityStatistics/ywzj.png'),
require('../../../assets/abilityStatistics/shujuziyuan.png'), require('../../../assets/abilityStatistics/tcfw.png'),
require('../../../assets/abilityStatistics/jichujianshe.png'), require('../../../assets/abilityStatistics/znsf.png'),
require('../../../assets/abilityStatistics/yingyongziyuan.png'), require('../../../assets/abilityStatistics/hkt.png'),
]) ])
// //
let dataLists = ref([]) let dataLists = ref([])
@ -379,12 +379,12 @@
display: flex; display: flex;
margin-bottom: 20px; margin-bottom: 20px;
color: #fff; color: #fff;
.fugai { // .fugai {
width: 40px; // width: 40px;
height: 390px; // height: 390px;
background: #0058e1; // background: #0058e1;
margin-top: 1px; // margin-top: 1px;
} // }
.volume_box-son { .volume_box-son {
width: 120px; width: 120px;
height: 390px; height: 390px;
@ -417,6 +417,11 @@
bottom: 44px; bottom: 44px;
} }
} }
.volume_box-son:nth-of-type(1) {
width: 140px;
padding-left: 28px;
background-position-x: 10px;
}
} }
} }
} }

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua * @Author: hisense.liangjunhua
* @Date: 2022-06-08 11:32:22 * @Date: 2022-06-08 11:32:22
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-07-18 18:49:30 * @LastEditTime: 2022-12-30 14:38:26
* @Description: 算法详情页 * @Description: 算法详情页
--> -->
<template> <template>
@ -192,7 +192,7 @@
<style lang="less" scoped> <style lang="less" scoped>
.fixed { .fixed {
position: fixed; position: fixed;
z-index: 2000; z-index: 10012;
top: 0; top: 0;
left: 50%; left: 50%;
margin-left: -9.56rem; margin-left: -9.56rem;

View File

@ -2,7 +2,7 @@
* @Author: hisense.gaoyuanwei * @Author: hisense.gaoyuanwei
* @Date: 2022-06-20 10:12:22 * @Date: 2022-06-20 10:12:22
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-07-18 18:49:01 * @LastEditTime: 2023-01-03 16:56:08
* @Description: 业务组件详情页 * @Description: 业务组件详情页
--> -->
<template> <template>
@ -175,7 +175,7 @@
<style lang="less" scoped> <style lang="less" scoped>
.fixed { .fixed {
position: fixed; position: fixed;
z-index: 2000; z-index: 10012;
top: 0; top: 0;
left: 50%; left: 50%;
margin-left: -9.56rem; margin-left: -9.56rem;

View File

@ -2,7 +2,7 @@
* @Author: hisense.liangjunhua * @Author: hisense.liangjunhua
* @Date: 2022-06-08 11:32:22 * @Date: 2022-06-08 11:32:22
* @LastEditors: hisense.wuhongjian * @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-07-18 18:48:32 * @LastEditTime: 2023-01-03 16:57:14
* @Description: 图层服务详情页 * @Description: 图层服务详情页
--> -->
<template> <template>
@ -184,7 +184,7 @@
<style lang="less" scoped> <style lang="less" scoped>
.fixed { .fixed {
position: fixed; position: fixed;
z-index: 2000; z-index: 10012;
top: 0; top: 0;
left: 50%; left: 50%;
margin-left: -9.56rem; margin-left: -9.56rem;

View File

@ -289,6 +289,9 @@
margin-bottom: 0.2rem; margin-bottom: 0.2rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
background: url("~@/assets/newHome/biaoti.png") no-repeat;
background-position-y: 7px;
padding-left: 17px;
} }
.ability-to-apply-for-content { .ability-to-apply-for-content {
@ -297,7 +300,7 @@
.dep-name { .dep-name {
color: #0558e1; color: #0558e1;
font-size: 0.22rem; font-size: 0.18rem;
display: flex; display: flex;
align-items: center; align-items: center;
line-height: 0.22rem; line-height: 0.22rem;
@ -346,7 +349,7 @@
.description { .description {
width: 8.8rem; width: 8.8rem;
color: rgba(0, 0, 0, 0.45); color: rgba(0, 0, 0, 0.70);
} }
.remove { .remove {

View File

@ -74,7 +74,11 @@
<span v-else> <span v-else>
{{ item.name }} {{ item.name }}
</span> </span>
<div :class="item.name === Cardsname ? 'sanjiao' : ''"></div>
</div> </div>
</div> </div>
<div class="top-content-father" :key="listKey"> <div class="top-content-father" :key="listKey">
<template <template
@ -215,6 +219,7 @@
<span v-else> <span v-else>
{{ item.name }} {{ item.name }}
</span> </span>
<div :class="item.name === Cardsname ? 'sanjiao' : ''"></div>
</div> </div>
</div> </div>
<div class="top-content-father"> <div class="top-content-father">
@ -276,6 +281,7 @@
<span v-else> <span v-else>
{{ item.name }} {{ item.name }}
</span> </span>
<div :class="item.name === Cardsname ? 'sanjiao' : ''"></div>
</div> </div>
</div> </div>
<KnowledgeBase <KnowledgeBase
@ -333,6 +339,7 @@
}" }"
></span> ></span>
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</div> </div>
</div> </div>
<div class="resultListSearchInput-father"> <div class="resultListSearchInput-father">
@ -465,6 +472,7 @@
}" }"
></span> ></span>
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</div> </div>
</div> </div>
<div class="top-content-father"> <div class="top-content-father">
@ -491,6 +499,7 @@
}" }"
></span> ></span>
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</div> </div>
</div> </div>
<div class="resultListSearchInput-father" style="background: unset"> <div class="resultListSearchInput-father" style="background: unset">
@ -2274,18 +2283,32 @@
margin-right: 0.1rem; margin-right: 0.1rem;
} }
div { div {
padding: 0 0.1rem; padding-left: 33px;
width: 220px;
cursor: pointer; cursor: pointer;
display: flex; // display: flex;
align-items: center; align-items: center;
} }
div span{
vertical-align:middle;
}
div:hover { div:hover {
color: #0087ff; color: #0058e1;
}
.sanjiao{
background: url('~@/assets/home/sanjiao.png');
background-repeat: no-repeat;
height: 10px;
width: 10px;
margin-left: 67px;
position: absolute;
} }
.sel { .sel {
font-weight: 600; color: #000000;
color: #0087ff; border-bottom: 0.03rem solid #0058e1;
border-bottom: 0.02rem solid #0087ff; // background: url('~@/assets/home/sanjiao.png');
// background-repeat: no-repeat;
} }
} }
.top-content-father { .top-content-father {
@ -2301,6 +2324,7 @@
display: flex; display: flex;
margin-top: 0rem; margin-top: 0rem;
span:nth-child(1) { span:nth-child(1) {
font-size: 0.14rem;
display: inline-block; display: inline-block;
position: relative; position: relative;
line-height: 0.3614rem; line-height: 0.3614rem;

View File

@ -667,22 +667,43 @@
</script> </script>
<style> <style>
.ant-modal-footer { .ant-modal-footer {
display: block; display: block;
} }
</style> </style>
<style lang="less" scoped> <style lang="less" scoped>
:deep(.ant-table-tbody > tr.ant-table-row-selected > td){
background: #e6eefb;
}
:deep(.ant-checkbox-checked .ant-checkbox-inner){
background-color: #0058e1;
}
:deep(.ant-checkbox-indeterminate .ant-checkbox-inner::after){
background-color: #0058e1;
}
.bg { .bg {
background: #fff; background: #fff;
height: 100vh; height: 100vh;
width: 100%; width: 100%;
} }
:deep .ant-anchor-link{
height: 50px !important;
line-height: 50px;
margin:0px !important;
}
:deep .ant-anchor-link-active > .ant-anchor-link-title {
color: #fff;
width: 100%;
height: 100%;
background: #0058e1;
}
:deep .ant-anchor-link-title:only-child {
// @font-face { padding-left: 14px;
// font-family: 'num-typeface'; }
// src: url('~@/assets/newHome/font/num-typeface.otf');
// }
.border { .border {
border: 1px solid #dddee1; border: 1px solid #dddee1;
@ -744,7 +765,7 @@
height: 60px; height: 60px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: left;
font-size: 16px; font-size: 16px;
color: #212121; color: #212121;
border-bottom: 1px solid #dddee1; border-bottom: 1px solid #dddee1;
@ -768,22 +789,22 @@
.top { .top {
width: 100%; width: 100%;
height: 100px; height: 137px;
margin-bottom: 20px; margin-bottom: 20px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-start; justify-content: flex-end;
.td-name { .td-name {
height: 100px; height: 137px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.td { .td {
height: 100px; height: 137px;
line-height: 100px; line-height: 137px;
position: relative; position: relative;
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -874,12 +895,13 @@
.modal-box { .modal-box {
height: 650px; height: 650px;
width: 800px; width: 800px;
} }
.add-img { .add-img {
height: 60px; height: 40px;
width: 60px; width: 40px;
background: url('~@/assets/newHome/add-on.png'); background: url('~@/assets/newHome/add-grey.png');
background-size: 100% 100%; background-size: 100% 100%;
cursor: pointer; cursor: pointer;
} }
@ -931,7 +953,7 @@
height: 60px; height: 60px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: left;
font-size: 16px; font-size: 16px;
color: #212121; color: #212121;
border-bottom: 1px solid #dddee1; border-bottom: 1px solid #dddee1;

View File

@ -8,96 +8,44 @@
</div> </div>
<div class="form-container"> <div class="form-container">
<div v-if="applySuccess"> <div v-if="applySuccess">
<a-form <div style=" background: #f6f7f9;
ref="formRef" padding: 24px 14px 14px 20px;
:model="formName" margin-bottom: 10px;
name="basic" margin-top: 10px;
:label-col="{ style: { width: '106px' } }" margin-bottom: 20px">
:wrapper-col="{ style: { width: '230px' } }" <a-form ref="formRef" :model="formName" name="basic" :label-col="{ style: { width: '106px' } }"
labelAlign="left" :wrapper-col="{ style: { width: '230px' } }" labelAlign="left" autocomplete="off">
autocomplete="off"
>
<div class="base-info flex-row-start"> <div class="base-info flex-row-start">
<a-form-item <a-form-item label="申请标题" name="title" :rules="[{ required: true, message: '请输入申请标题' }]">
label="申请标题" <a-input placeholder="请输入能力申请标题" v-model:value="formName.title" />
name="title"
:rules="[{ required: true, message: '请输入申请标题' }]"
>
<a-input
placeholder="请输入能力申请标题"
v-model:value="formName.title"
/>
</a-form-item> </a-form-item>
<!-- 西海岸-摄像头-增加过期时间 --> <!-- 西海岸-摄像头-增加过期时间 -->
<a-form-item <a-form-item v-if="isCamera && isXiHaiAn" label="过期时间" name="expireDate"
v-if="isCamera && isXiHaiAn" :rules="[{ required: true, message: '请选择过期时间' }]" style="margin-left: 22px">
label="过期时间" <a-select v-model:value="formName.expireDate" placeholder="请选择过期时间" style="width: 200px"
name="expireDate" :options="expireDateOptions"></a-select>
:rules="[{ required: true, message: '请选择过期时间' }]"
style="margin-left: 22px"
>
<a-select
v-model:value="formName.expireDate"
placeholder="请选择过期时间"
style="width: 200px"
:options="expireDateOptions"
></a-select>
</a-form-item> </a-form-item>
</div> </div>
<div class="base-info"> <div class="base-info">
<a-form-item <a-form-item label="申请人信息" name="user" :rules="[{ required: true, message: '请输入申请人' }]">
label="申请人信息" <a-input placeholder="请输入申请人" v-model:value="formName.user" disabled />
name="user"
:rules="[{ required: true, message: '请输入申请人' }]"
>
<a-input
placeholder="请输入申请人"
v-model:value="formName.user"
disabled
/>
</a-form-item> </a-form-item>
<a-form-item <a-form-item style="margin: 0 0px" label="电话" name="phone" :rules="[
style="margin: 0 22px"
label="电话"
name="phone"
:rules="[
{ {
required: true, required: true,
pattern: /^1[3456789]\d{9}$/, pattern: /^1[3456789]\d{9}$/,
message: '请输入正确的电话号码', message: '请输入正确的电话号码',
}, },
]" ]">
> <a-input placeholder="请输入申请人电话" v-model:value="formName.phone" />
<a-input
placeholder="请输入申请人电话"
v-model:value="formName.phone"
/>
</a-form-item> </a-form-item>
<a-form-item <a-form-item label="单位" name="unit" :rules="[{ required: true, message: '请输入单位' }]">
label="单位" <a-input placeholder="请输入单位" v-model:value="formName.unit" disabled v-if="deptFlage" />
name="unit" <a-select v-else placeholder="请选择归属部门" v-model:value="formName.unit"
:rules="[{ required: true, message: '请输入单位' }]" :getPopupContainer="(triggerNode) => triggerNode.parentNode" show-search :filterOption="true"
> @change="deptIdChangeFunction">
<a-input <a-select-option v-for="(item, index) in deptNameAll" :key="`${index}-${item}`"
placeholder="请输入单位" :value="item.name">
v-model:value="formName.unit"
disabled
v-if="deptFlage"
/>
<a-select
v-else
placeholder="请选择归属部门"
v-model:value="formName.unit"
:getPopupContainer="(triggerNode) => triggerNode.parentNode"
show-search
:filterOption="true"
@change="deptIdChangeFunction"
>
<a-select-option
v-for="(item, index) in deptNameAll"
:key="`${index}-${item}`"
:value="item.name"
>
{{ item.name }} {{ item.name }}
</a-select-option> </a-select-option>
</a-select> </a-select>
@ -105,63 +53,29 @@
</div> </div>
<div class="base-info" v-if="flag"> <div class="base-info" v-if="flag">
<div style="margin-bottom: 24px"> <div style="margin-bottom: 24px">
<a-form-item <a-form-item style="margin-bottom: 0" label="应用系统" name="applicationSystem"
style="margin-bottom: 0" :rules="[{ required: true, message: '请选择应用系统' }]">
label="应用系统" <a-select v-model:value="formName.applicationSystem" show-search placeholder="请选择应用系统"
name="applicationSystem" style="width: 230px" :options="systemOptions" @focus="handleFocus" @blur="handleBlur"
:rules="[{ required: true, message: '请选择应用系统' }]" @change="systemHandleChange" @search="systemHandleSearch"></a-select>
>
<a-select
v-model:value="formName.applicationSystem"
show-search
placeholder="请选择应用系统"
style="width: 230px"
:options="systemOptions"
@focus="handleFocus"
@blur="handleBlur"
@change="systemHandleChange"
@search="systemHandleSearch"
></a-select>
</a-form-item> </a-form-item>
<span <span style="font-size: 12px; color: #666; padding-left: 106px">
style="font-size: 12px; color: #666; padding-left: 106px"
>
如选项没有系统请新增 如选项没有系统请新增
</span> </span>
</div> </div>
<a-form-item <a-form-item class="applicationScene" label="应用领域" name="applicationScene"
class="applicationScene" :rules="[{ required: true, message: '请选择应用领域' }]" style="width: 6.93rem">
label="应用领域" <a-select v-model:value="formName.applicationScene" :options="applicationSceneOpthion" mode="tags"
name="applicationScene" :size="size" placeholder="请选择应用领域" :filterOption="false" :searchValue="false"
:rules="[{ required: true, message: '请选择应用领域' }]" style="width: 5.87rem"></a-select>
style="width: 6.93rem"
>
<a-select
v-model:value="formName.applicationScene"
:options="applicationSceneOpthion"
mode="tags"
:size="size"
placeholder="请选择应用领域"
:filterOption="false"
:searchValue="false"
style="width: 5.87rem"
></a-select>
</a-form-item> </a-form-item>
</div> </div>
<div> <div>
<a-form-item <a-form-item label="需求依据" name="applicationBackground" :rules="[
label="需求依据"
name="applicationBackground"
:rules="[
{ required: true, message: '请输入需求依据' }, { required: true, message: '请输入需求依据' },
{ min: 50, message: '需求依据最少为50个字' }, { min: 50, message: '需求依据最少为50个字' },
]" ]">
> <a-textarea placeholder="请输入需求依据" v-model:value="formName.applicationBackground" :rows="4" />
<a-textarea
placeholder="请输入需求依据"
v-model:value="formName.applicationBackground"
:rows="4"
/>
</a-form-item> </a-form-item>
</div> </div>
@ -169,20 +83,10 @@
<div v-if="isXiHaiAn"> <div v-if="isXiHaiAn">
<a-row style="margin-top: 0.4rem"> <a-row style="margin-top: 0.4rem">
<a-col :span="24"> <a-col :span="24">
<a-form-item <a-form-item name="attachment" label="附件上传" class="introduction"
name="attachment" :rules="[{ required: true, message: '请上传附件' }]">
label="附件上传" <a-upload :max-count="1" accept=".doc,.docx,pdf" v-model:file-list="fileList"
class="introduction" :action="`${apiURL}/upload`" @remove="handleRemove" @change="roomUpload">
:rules="[{ required: true, message: '请上传附件' }]"
>
<a-upload
:max-count="1"
accept=".doc,.docx,pdf"
v-model:file-list="fileList"
:action="`${apiURL}/upload`"
@remove="handleRemove"
@change="roomUpload"
>
<a-button> <a-button>
<upload-outlined>选择上传附件</upload-outlined> <upload-outlined>选择上传附件</upload-outlined>
</a-button> </a-button>
@ -195,35 +99,25 @@
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="24" style="margin-left: 106px"> <a-col :span="24" style="margin-left: 106px">
<a <a href="/static/download/感知资源申请表.doc" download="感知资源申请表">
href="/static/download/感知资源申请表.doc"
download="感知资源申请表"
>
感知资源申请表模板下载 感知资源申请表模板下载
</a> </a>
</a-col> </a-col>
</a-row> </a-row>
</div> </div>
</a-form>
</div>
<div class="bottom-btn"> <div class="bottom-btn">
<a-button
class="cancel-apply" <a-button class="confirm-apply" type="primary" html-type="submit" @click="processStartHandle()">
type="primary" 申请
html-type="cancle"
@click="resetFields()"
>
退出申请
</a-button> </a-button>
<a-button <a-button class="cancel-apply" type="primary" html-type="cancle" @click="resetFields()">
class="confirm-apply" 取消
type="primary"
html-type="submit"
@click="processStartHandle()"
>
提交申请
</a-button> </a-button>
</div> </div>
</a-form>
</div> </div>
<div class="success" v-else> <div class="success" v-else>
<div> <div>
@ -237,15 +131,15 @@
</div> </div>
</template> </template>
<script> <script>
import { willApplyCameraBatchDelete } from '@/api/home' import { willApplyCameraBatchDelete } from '@/api/home'
import AbilityToApplyFor from './AbilityToApplyFor.vue' import AbilityToApplyFor from './AbilityToApplyFor.vue'
import HomeHeader from '@/views/home/components/header' import HomeHeader from '@/views/home/components/header'
import { reactive, ref, watch, onBeforeUnmount } from 'vue' import { reactive, ref, watch, onBeforeUnmount } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import qs from 'qs' import qs from 'qs'
import { Upload } from 'ant-design-vue' import { Upload } from 'ant-design-vue'
import { import {
lastestPage, lastestPage,
tabilityapplication, tabilityapplication,
startOfBusinessKey, startOfBusinessKey,
@ -256,22 +150,22 @@
getUserInfo, getUserInfo,
relaunch, relaunch,
selectOne, selectOne,
} from '@/api/home' } from '@/api/home'
import { getDeptAll } from '@/api/user' import { getDeptAll } from '@/api/user'
import { getCategoryTreePage, endProcess } from '@/api/personalCenter' import { getCategoryTreePage, endProcess } from '@/api/personalCenter'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
import { sgcDel, getApplyForm } from '@/api/personalCenter' import { sgcDel, getApplyForm } from '@/api/personalCenter'
import { import {
pageWithAttrs, pageWithAttrs,
updateIntegrationServices, updateIntegrationServices,
getAppListByDept, getAppListByDept,
} from '@/api/home' } from '@/api/home'
import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js' import { DETAIL_PAGE_CONTENT_DEFAULT_TAB } from '@/global/GlobalConfig.js'
import { getIntegrationDetail, soldierApply } from '@/api/home' import { getIntegrationDetail, soldierApply } from '@/api/home'
import { useStore } from 'vuex' import { useStore } from 'vuex'
import * as moment from 'moment' import * as moment from 'moment'
export default { export default {
name: '', name: '',
props: {}, props: {},
components: { components: {
@ -352,8 +246,7 @@
const isCamera = ref(false) const isCamera = ref(false)
// 西- // 西-
let note1 = JSON.parse( let note1 = JSON.parse(
(list.value[0] && list.value[0].arr && list.value[0].arr[0].note1) || (list.value[0] && list.value[0].arr && list.value[0].arr[0].note1) || '[]'
'[]'
) )
let iskfq = ref( let iskfq = ref(
note1.some( note1.some(
@ -758,10 +651,10 @@
processDefinitionKey: processDefinitionKey, processDefinitionKey: processDefinitionKey,
businessKey: businessKey, businessKey: businessKey,
}) })
updateInstanceId(params).then(() => {}) updateInstanceId(params).then(() => { })
} }
}) })
.catch(() => {}) .catch(() => { })
} }
const options = ref([ const options = ref([
{ {
@ -974,10 +867,14 @@
iskfq, iskfq,
} }
}, },
} }
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
#apply-container { :deep .ant-form-item-label-left {
text-align: right;
}
#apply-container {
// background-color: #f5f8fc; // background-color: #f5f8fc;
height: 100%; height: 100%;
width: 100%; width: 100%;
@ -1002,8 +899,11 @@
} }
.form-container { .form-container {
padding: 20px 20px 30px 20px; //padding: 20px 20px 30px 20px;
overflow: hidden; overflow: hidden;
margin-top: 15px;
// background: #f6f7f9;
.title { .title {
font-size: 20px; font-size: 20px;
color: #000; color: #000;
@ -1056,9 +956,9 @@
font-weight: bold; font-weight: bold;
color: #000; color: #000;
} }
} }
.applicationScene { .applicationScene {
:deep(.ant-select-selector) { :deep(.ant-select-selector) {
overflow-x: scroll; overflow-x: scroll;
} }
@ -1066,41 +966,51 @@
:deep(.ant-select-selection-overflow) { :deep(.ant-select-selection-overflow) {
flex-wrap: nowrap; flex-wrap: nowrap;
} }
} }
textarea { textarea {
resize: none; resize: none;
font-size: 14px; font-size: 14px;
} }
.bottom-btn { .bottom-btn {
display: flex; display: flex;
justify-content: center; justify-content: center;
// position: fixed; // position: fixed;
} }
.cancel-apply { .cancel-apply {
width: 80px; width: 80px;
height: 38px; height: 32px;
text-align: center;
background: #fff;
color: #0558e1;
border: 1px solid #0558e1;
border-radius: 2px;
font-size: 14px;
}
.cancel-apply:hover {
background: #fff;
color: #0558e1;
opacity: 0.8;
}
.confirm-apply {
margin-right: 20px; margin-right: 20px;
background: #e1edfa;
color: #0087ff;
font-size: 14px;
border-radius: 6px;
border: none;
padding: 0;
text-align: center;
}
.confirm-apply {
width: 80px; width: 80px;
height: 38px; height: 32px;
background: #0087ff;
color: #fff;
font-size: 14px;
border-radius: 6px;
border: none;
padding: 0;
text-align: center; text-align: center;
} background: #0558e1;
color: #fff;
border: 1px solid #0558e1;
border-radius: 2px;
font-size: 14px;
}
.confirm-apply :hover {
background: #0558e1;
color: #fff;
opacity: 0.8;
}
</style> </style>

View File

@ -84,9 +84,9 @@ watch(
.caseBox { .caseBox {
width: 3.5rem; width: 3.5rem;
height: 3rem; height: 3rem;
box-shadow: 1px 1px 5px 5px rgba(222, 222, 222, 0.152); border: 1px solid #ebecef;
box-shadow: 1px 1px 5px 5px rgb(222 222 222 / 15%);
background: #ffffff; background: #ffffff;
border-radius: 0.05rem;
padding: 0.2rem; padding: 0.2rem;
margin-bottom: 0.2rem; margin-bottom: 0.2rem;
cursor: pointer; cursor: pointer;

View File

@ -147,19 +147,19 @@
cursor: pointer; cursor: pointer;
} }
.zskTag { .zskTag {
margin: 20px 10px; margin: 20px 20px;
// display: flex; // display: flex;
// justify-content: center; // justify-content: center;
border-top: 1px solid #eee; border-top: 1px solid #dddee1;
padding-top: 20px; padding-top: 18px;
.type { .type {
padding: 0 10px 0 0; padding: 0 10px 0 0;
font-size: 18px; font-size: 16px;
font-weight: 600; font-weight: 600;
border-right: 1px solid #eee; border-right: 1px solid #dddee1;
} }
.ant-tag { .ant-tag {
font-size: 18px; font-size: 16px;
padding: 5px; padding: 5px;
margin-left: 10px; margin-left: 10px;
} }
@ -170,15 +170,20 @@
} }
.top { .top {
display: flex; display: flex;
padding-top: 10px;
justify-content: space-between; justify-content: space-between;
border-top: 1px solid #eee; border-top: 1px solid #dddee1;
margin: 10px 0; margin: 3px 18px 5px;
padding: 30px 10px 0; font-size: 14px;
span { span {
color: #0058e1; color: #0058e1;
font-weight: 600; font-weight: 600;
font-size:16px;
} }
} }
:deep(.ant-list-lg .ant-list-item){
padding: 18px 17px 12px 49px;
}
:deep(.ant-list-bordered) { :deep(.ant-list-bordered) {
border: none; border: none;
.ant-list-item { .ant-list-item {
@ -192,11 +197,12 @@
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
font-size: 14px;
svg { svg {
margin-right: 5px; margin-right: 5px;
} }
.text { .text {
font-size: 16px; font-size: 14px;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
color: #0087ff; color: #0087ff;

View File

@ -75,10 +75,12 @@
<div class="mynotice" v-show="mynoticeFlag"> <div class="mynotice" v-show="mynoticeFlag">
<a-list item-layout="horizontal" :data-source="mynoticeData"> <a-list item-layout="horizontal" :data-source="mynoticeData">
<template #renderItem="{ item }"> <template #renderItem="{ item }">
<a-tooltip placement="left"> <!-- <a-tooltip placement="left">
<template #title> <template #title>
<span>{{ item.content }}</span> <span>{{ item.content }}</span>
</template> </template>
</a-tooltip> -->
<a-list-item> <a-list-item>
<a-list-item-meta :description="item.senderDate"> <a-list-item-meta :description="item.senderDate">
<template #title> <template #title>
@ -86,10 +88,26 @@
</template> </template>
</a-list-item-meta> </a-list-item-meta>
</a-list-item> </a-list-item>
</a-tooltip>
</template> </template>
</a-list> </a-list>
<div class="bottom" @click="goToView()">查看更多</div> <div class="bottom" @click="goToView()">
查看更多
<svg
t="1672387024761"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="2682"
width="20"
height="20"
>
<path
d="M185.884 327.55 146.3 367.133 512.021 732.779 877.7 367.133 838.117 327.55 511.997 653.676Z"
p-id="2683"
></path>
</svg>
</div>
</div> </div>
<div class="info"> <div class="info">
<i <i
@ -127,7 +145,7 @@
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref, onMounted, onBeforeUnmount, defineProps } from 'vue' import { ref, onMounted, onBeforeUnmount, defineProps,watch } from 'vue'
import { getUserInfo, getRole } from '@/api/user' import { getUserInfo, getRole } from '@/api/user'
import { recordRoute } from '@/config' import { recordRoute } from '@/config'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
@ -162,6 +180,22 @@
} }
const targetRouter = ref('') const targetRouter = ref('')
const backFlag = ref(false) const backFlag = ref(false)
watch(
() => router.currentRoute.value.path,
(newValue, oldValue) => {
if(newValue=='/apply' || newValue=='/details'){
select.value='DetailsPageconetent'
}else if(newValue=='/demandDetails'){
select.value='demandCenter'
}
else if(newValue=='/integrationServicesDetails'){
select.value='integrationServices'
}
},
{ immediate: true }
)
getUserInfo().then((res) => { getUserInfo().then((res) => {
if (res.data.data.superAdmin == '1') { if (res.data.data.superAdmin == '1') {
backFlag.value = true backFlag.value = true
@ -176,7 +210,6 @@
} }
}) })
console.log('navList------------>', navList)
const props = defineProps({ const props = defineProps({
showView: { type: String, default: '' }, showView: { type: String, default: '' },
@ -197,7 +230,7 @@
} }
} }
} }
console.log('3333333------------>', props)
// //
const goToHome = () => { const goToHome = () => {
// 西 // 西
@ -226,6 +259,7 @@
return message.warn('暂无权限') return message.warn('暂无权限')
} }
} }
select.value = item.key select.value = item.key
switch (item.name) { switch (item.name) {
case '个人中心': case '个人中心':
@ -693,6 +727,9 @@
text-align: center; text-align: center;
color: #000; color: #000;
font-size: 0.16rem; font-size: 0.16rem;
display: flex;
justify-content: center;
align-items: center;
} }
} }
@ -721,6 +758,9 @@
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
cursor: default; cursor: default;
} }
a:hover {
color: #0058e1;
}
button { button {
width: 0.7rem; width: 0.7rem;

View File

@ -969,6 +969,7 @@
// margin: 11px 0 20px; // margin: 11px 0 20px;
// background: #e5f2ff; // background: #e5f2ff;
// padding-left: 20px; // padding-left: 20px;
padding-top:10px;
display: flex; display: flex;
align-items: center; align-items: center;
position: relative; position: relative;

View File

@ -372,6 +372,7 @@
li { li {
width: 90px; width: 90px;
height: 12px; height: 12px;
align-items: right;
position: relative; position: relative;
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;

View File

@ -117,11 +117,14 @@
</div> </div>
<a-button <a-button
style=" style="
margin-left: 0.8rem; width: 80px;
background: #e1edfa; height: 32px;
color: #0087ff; text-align: center;
border: none; background: #0558e1;
border-radius: 0.06rem; color: #fff;
border: 1px solid #0558e1;
border-radius: 2px;
font-size: 14px;
" "
@click="appointment(item)" @click="appointment(item)"
> >
@ -405,18 +408,23 @@
:wrapper-col="{ span: 14, offset: 4 }" :wrapper-col="{ span: 14, offset: 4 }"
style="text-align: center; margin-top: 0.4rem" style="text-align: center; margin-top: 0.4rem"
> >
<a-button @click="appointmentRoom = false" type="primary" danger>
取消
</a-button>
<a-button <a-button
style="margin-left: 10px" class="tijiao"
type="primary"
@click="onSubmit" @click="onSubmit"
> >
提交 提交
</a-button> </a-button>
<a-button class="quxiao" @click="appointmentRoom = false" >
取消
</a-button>
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>
</div> </div>
<div v-if="room"> <div v-if="room">
@ -1207,7 +1215,7 @@
if (item && item.status != 1) { if (item && item.status != 1) {
return return
// return message.warning('线, ') // return message.warning('线, ')
} }handleChose
console.log('打开视频', id) console.log('打开视频', id)
const param = { const param = {
key: id, key: id,
@ -2512,6 +2520,38 @@
}) })
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.quxiao{
margin-right:12px;
cursor: pointer;
width: 90px;
height: 32px;
background: #ffffff;
color:#0058e1;
border-radius: 2px;
border: 1px #0058e1 solid;
}
.quxiao:hover{
background: #fff;
color: #0558e1;
opacity: 0.8;
}
.tijiao{
margin-right:12px;
cursor: pointer;
width: 90px;
height: 32px;
background: #0058e1;
color:#ffffff;
border-radius: 2px;
border: 1px #0058e1 solid;
margin-left:20px;
}
.tijiao:hover{
background: #0558e1;
color: #fff;
opacity: 0.8;
}
.queding { .queding {
margin-left: 16px; margin-left: 16px;
cursor: pointer; cursor: pointer;
@ -2830,7 +2870,7 @@
.rightContent { .rightContent {
height: 1.75rem; height: 1.75rem;
width: 5.8rem; width: 5.8rem;
margin-right:72px;
.topContent { .topContent {
font-size: 0.2rem; font-size: 0.2rem;
color: #000; color: #000;
@ -2859,10 +2899,20 @@
// } // }
} }
:deep(.ant-table-thead > tr > th) { :deep(.ant-table-thead > tr > th) {
color: #5580f7 !important; color: #0058e1 !important;
font-size: 16px !important; font-size: 16px !important;
font-weight: 600 !important; font-weight: 600 !important;
} }
:deep(.ant-table-tbody > tr.ant-table-row-selected > td){
background: #e6eefb;
}
:deep(.ant-checkbox-checked .ant-checkbox-inner){
background-color: #0058e1;
}
:deep(.ant-checkbox-indeterminate .ant-checkbox-inner::after){
background-color: #0058e1;
}
</style> </style>
<style lang="less"> <style lang="less">
.eia-dropdown-class { .eia-dropdown-class {
@ -2894,16 +2944,19 @@
.appModal { .appModal {
.ant-modal-body { .ant-modal-body {
height: 4.8rem !important; height: 3.8rem !important;
overflow-y: scroll !important; overflow-y: scroll !important;
} }
.ant-modal-title { .ant-modal-title {
font-weight: 600; font-weight: 600;
color:#fff;
} }
.ant-modal-content { .ant-modal-content {
.ant-modal-header { .ant-modal-header {
background: #0058e1;
margin-bottom: 16px;
border-bottom: 0 !important; border-bottom: 0 !important;
} }
} }

View File

@ -1,90 +1,92 @@
<template> <template>
<!-- 青岛 --> <!-- 青岛 -->
<div class="details-pageconetent">
<home-header></home-header>
<div class="top">
<div class="top-title"> <div class="top-title">
全部
<div <div v-for="item in titleName" :key="item.index" class="tabAll" @click="changeCards(item.index)"
v-for="item in titleName" :class="{ sel: item.index === number }">
:key="item.index"
class="tabAll"
@click="changeCards(item.index)"
:class="{ sel: item.index === number }"
>
<span> <span>
{{ item.name === '赋能场景' ? '典型赋能场景' : '打包模式' }} {{ item.name === '赋能场景' ? '典型赋能场景' : '打包模式' }}
</span> </span>
</div> </div>
</div> </div>
<div class="resultListSearchInput-father" v-if="number === 0"> <div class="details-pageconetent">
<div class="resultListSearchInput-son"> <home-header></home-header>
模糊搜索 <div class="top">
<a-input-search
v-model:value="searchValue"
placeholder="请输入关键词"
enter-button="搜索"
size="large"
@search="getIntegrationList"
@change="onSearch"
class="resultListSearchInput"
/>
<i class="searchImg" aria-hidden="true"></i>
<button class="button-reset" @click="resetAction()">重置</button>
<div class="hengxian"></div> <div class="resultListSearchInput-father" v-if="number === 0">
<div class="second-title">
<div :class="[cityOrArea === 0 ? 'departmentStyle' : 'departmentStyle1']" @click="handleChose(0)">
<img src="~@/assets/home/city.png" /> 市级领域场景
<div :class="cityOrArea === 0 ? 'sanjiao' : ''"></div>
</div>
<div :class="[cityOrArea === 1 ? 'departmentStyle' : 'departmentStyle1']" @click="handleChose(1)">
<img src="~@/assets/home/area.png" /> 基层场景
<div :class="cityOrArea === 1 ? 'sanjiao' : ''"></div>
</div>
</div>
<div class="resultListSearchInput-son">
<div class="son-input">
<a-input-search v-model:value="searchValue" placeholder="请输入关键字" enter-button="搜索" size="large"
@search="getIntegrationList" @change="onSearch" class="resultListSearchInput" />
<i class="searchImg" aria-hidden="true"></i>
<!-- <button class="button-reset" @click="resetAction()">重置</button> -->
</div>
<div>
<div class="all">全部</div>
<div class="choose-tab" v-if="cityOrArea === 0">
<span v-for="item in senses" :key="item.data" @click="tabSensesClick(item.dict_label)" :class="
clickSensesList.indexOf(item.dict_label) != -1
? 'down'
: ''
">
{{ item.dict_label }}
</span>
</div>
<div v-else class="choose-tab">
<span v-for="item in areas" :key="item.data" @click="tabAreasClick(item.name)" :class="
clickAreasList.indexOf(item.name) != -1
? 'down'
: ''
">
{{ item.name }}
</span>
</div> </div>
</div> </div>
<div v-if="number === 0" class="checkResult">检测结果: <span>{{resourceTotal}}</span></div> </div>
</div>
<div style="background:#fff;margin-left:16px;margin-right:16px;">
<div v-if="number === 0" class="checkResult">检测结果: <span>{{ resourceTotal }}</span></div>
<div v-loading="loadingData"> <div v-loading="loadingData">
<searchResultList <searchResultList v-if="number === 1" v-show="resourceList.data && resourceList.data.length > 0"
v-if="number === 1" :resourceList="resourceList" :resourceTotal="resourceTotal" @saveSearchCodition="saveSearchCodition"
v-show="resourceList.data && resourceList.data.length > 0" ref="searchResultListDom" :selectCardsname="number == 0 ? '融合服务' : '赋能场景'" />
:resourceList="resourceList" <CanAssignCase v-else v-show="resourceList.data && resourceList.data.length > 0" :resourceList="resourceList"
:resourceTotal="resourceTotal" @saveSearchCodition="saveSearchCodition" :resourceTotal="resourceTotal"
@saveSearchCodition="saveSearchCodition" :selectCardsname="number == 0 ? '融合服务' : '赋能场景'" />
ref="searchResultListDom"
:selectCardsname="number == 0 ? '融合服务' : '赋能场景'"
/>
<CanAssignCase
v-else
v-show="resourceList.data && resourceList.data.length > 0"
:resourceList="resourceList"
@saveSearchCodition="saveSearchCodition"
:resourceTotal="resourceTotal"
:selectCardsname="number == 0 ? '融合服务' : '赋能场景'"
/>
<div class="pagination"> <div class="pagination">
<a-pagination <a-pagination v-if="resourceList.data && resourceList.data.length > 0" v-model:current="currentPage"
v-if="resourceList.data && resourceList.data.length > 0" v-model:pageSize="currentPageSize" show-size-changer show-less-items show-quick-jumper
v-model:current="currentPage" :total="resourceTotal" :page-size-options="pageSizeOptions" @change="pageChange"
v-model:pageSize="currentPageSize" @showSizeChange="onShowSizeChange" />
show-size-changer
show-less-items
show-quick-jumper
:total="resourceTotal"
:page-size-options="pageSizeOptions"
@change="pageChange"
@showSizeChange="onShowSizeChange"
/>
</div> </div>
<div <div v-if="resourceList.data && resourceList.data.length <= 0" style="margin-top: 2rem">
v-if="resourceList.data && resourceList.data.length <= 0"
style="margin-top: 2rem"
>
<a-empty /> <a-empty />
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<home-footer></home-footer> <home-footer></home-footer>
</template> </template>
<script> <script>
import HomeFooter from '@/views/newHome/components/Footer' import HomeFooter from '@/views/newHome/components/Footer'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
import qs from 'qs'
import { import {
defineComponent, defineComponent,
reactive, reactive,
@ -93,14 +95,14 @@
onMounted, onMounted,
nextTick, nextTick,
} from 'vue' } from 'vue'
import { getIntegrationServicesList } from '@/api/home.js' import { getIntegrationServicesList, getRegion, selectDicStoreAll } from '@/api/home.js'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import HomeHeader from '@/views/home/components/header' import HomeHeader from '@/views/home/components/header'
import searchResultList from '@/views/home/components/searchResultList.vue' import searchResultList from '@/views/home/components/searchResultList.vue'
import CanAssignCase from '@/views/home/components/CanAssignCase.vue' import CanAssignCase from '@/views/home/components/CanAssignCase.vue'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
export default defineComponent({ export default defineComponent({
beforeRouteLeave(to, from, next) { beforeRouteLeave(to, from, next) {
console.log('to---integrationServices--beforeRouteLeave------->', to) console.log('to---integrationServices--beforeRouteLeave------->', to)
console.log('from---integrationServices--beforeRouteLeave------->', from) console.log('from---integrationServices--beforeRouteLeave------->', from)
@ -147,7 +149,15 @@
name: searchValue.value, name: searchValue.value,
orderField: 'create_date', orderField: 'create_date',
orderType: 'DESC', // ASC DESC orderType: 'DESC', // ASC DESC
areas:[],
senses:[],
district: 1,//01
} }
let cityOrArea = ref(0)//0 1
let senses = ref([])//
let areas = ref([])//
let clickSensesList = ref([])//
let clickAreasList = ref([])//
const searchResultListDom = ref(null) const searchResultListDom = ref(null)
const storageSearchInfo = JSON.parse( const storageSearchInfo = JSON.parse(
localStorage.getItem('integrationServices') localStorage.getItem('integrationServices')
@ -180,12 +190,34 @@
} }
const changeCards = (val) => { const changeCards = (val) => {
//
number.value = val number.value = val
paramsGetResources.type = titleName.value[number.value].name paramsGetResources.type = titleName.value[number.value].name
resetAction() resetAction()
} }
//
const handleChose = (index) => {
cityOrArea.value = index;
getIntegrationList()
}
//
const tabAreasClick = (name) => {
if (clickAreasList.value.indexOf(name) == -1) {
clickAreasList.value.push(name);
} else {
clickAreasList.value.splice(clickAreasList.value.indexOf(name), 1)
}
getIntegrationList()
}
//
const tabSensesClick = (name) => {
if (clickSensesList.value.indexOf(name) == -1) {
clickSensesList.value.push(name);
} else {
clickSensesList.value.splice(clickSensesList.value.indexOf(name), 1)
}
getIntegrationList()
}
// //
const onSearch = () => { const onSearch = () => {
currentPage.value = 1 currentPage.value = 1
@ -203,21 +235,48 @@
paramsGetResources.limit = 10 paramsGetResources.limit = 10
paramsGetResources.orderField = 'create_date' paramsGetResources.orderField = 'create_date'
paramsGetResources.orderType = 'DESC' paramsGetResources.orderType = 'DESC'
mybus.emit('resetAction', { mybus.emit('resetAction', {
type: titleName.value[number.value].name, type: titleName.value[number.value].name,
}) })
getIntegrationList() getIntegrationList()
} }
//
const searchAreas = () => {
const params = {
topCategoryName: '应用资源'
}
selectDicStoreAll(params).then(
(res) => {
senses.value = res.data.data[0].typeList
console.log("==================== senses.value", senses.value)
})
const params1 = {
pid: '250000'
}
getRegion(params1).then(
(res) => {
areas.value = res.data.data
})
}
// //
const getIntegrationList = () => { const getIntegrationList = () => {
loadingData.value = true loadingData.value = true
paramsGetResources.name = searchValue.value paramsGetResources.name = searchValue.value
console.log( if(number.value==1){
'paramsGetResources------参数下发------>', paramsGetResources.district=''
paramsGetResources }else{
) if(cityOrArea.value==0){//
paramsGetResources.district=0
paramsGetResources.areas=[]
paramsGetResources.senses=JSON.stringify(clickSensesList.value)
}else{//
paramsGetResources.district=1
paramsGetResources.senses=[]
paramsGetResources.areas=JSON.stringify(clickAreasList.value)
}
}
getIntegrationServicesList(paramsGetResources).then( getIntegrationServicesList(paramsGetResources).then(
(res) => { (res) => {
loadingData.value = false loadingData.value = false
@ -291,17 +350,20 @@
} }
onMounted(() => { onMounted(() => {
if(returnType=='典型赋能场景'){ searchAreas()
if (returnType == '典型赋能场景') {
changeCards(0) changeCards(0)
}else if(returnType=='打包模式'){
} else if (returnType == '打包模式') {
changeCards(1) changeCards(1)
}else{ } else {
if (storageSearchInfo) { if (storageSearchInfo) {
handleSetSearchData() handleSetSearchData()
} else { } else {
getIntegrationList() getIntegrationList()
} }
} }
// if (storageSearchInfo) { // if (storageSearchInfo) {
// handleSetSearchData() // handleSetSearchData()
// } else { // } else {
@ -310,6 +372,9 @@
}) })
return { return {
tabSensesClick,
tabAreasClick,
searchValue, searchValue,
currentPage, currentPage,
resourceList, resourceList,
@ -327,9 +392,16 @@
returnType, returnType,
number, number,
loadingData, loadingData,
cityOrArea,
onShowSizeChange, onShowSizeChange,
saveSearchCodition, saveSearchCodition,
handleChose,
searchAreas,
senses,
areas,
searchResultListDom, searchResultListDom,
clickSensesList,
clickAreasList,
} }
}, },
components: { components: {
@ -344,29 +416,142 @@
mybus.off('refresh') mybus.off('refresh')
mybus.off('changePage') mybus.off('changePage')
}, },
}) })
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.checkResult{ .top-title {
margin-left: 0.2rem;
font-size: 14px; display: flex;
font-weight: 500; font-size: 20px;
margin-top: 65px;
background: #e5eefc;
opacity: 0.8;
height: 72px;
.tabAll {
color: #212121; color: #212121;
margin-top: 10px; margin-right: 35px;
cursor: pointer;
margin-top: 24px;
text-align: center;
width: 240px;
padding-top: 8px;
}
.tabAll:nth-child(1) {
margin-left: 720px;
}
.sel {
border-top: 2px solid #0058e1;
height: 48px;
background: #fff;
width: 240px;
span { span {
font-size: 18px; font-weight: bold;
color: #0087ff; }
} }
} }
.resultListSearchInput-father {
.checkResult {
margin-left: 16px;
font-size: 14px;
font-weight: 500;
color: #212121;
margin-top: 16px;
margin-bottom: 16px;
span {
font-size: 18px;
color: #0058e1;
}
}
.resultListSearchInput-father {
background: #f3f5f9; background: #f3f5f9;
padding: 0rem 0.2rem; margin-bottom:24px;
.sanjiao {
background: url('~@/assets/home/sanjiao.png');
background-repeat: no-repeat;
height: 10px;
width: 10px;
margin-left: 80px;
position: absolute;
}
.second-title {
padding-top: 16px;
margin-bottom: 16px;
font-size: 18px;
cursor: pointer;
text-align: center;
vertical-align: bottom;
background: #fff;
height: 53px;
border-bottom: 1px solid #d9d9d9;
}
.departmentStyle {
float: left;
width: 180px;
// color: #0058e1;
background-color: #fff;
border-bottom: 3px solid #0058e1;
}
.departmentStyle1 {
float: left;
width: 180px;
}
.resultListSearchInput-son { .resultListSearchInput-son {
background: #fff; .son-input {
padding: 0.2rem 0.2rem 0rem 0.3rem; margin: 24px 0px 12px 340px;
}
// background: #fff;
//padding: 0.2rem 0.2rem 0rem 0.3rem;
.all {
float: left;
display: inline;
width: 42px;
margin-top: 12px;
margin-left: 100px;
font-size: 14px;
font-weight: bold;
}
.choose-tab {
float: left;
display: inline;
width: 940px;
span {
display: inline-block;
height: 28px;
font-size: 14px;
width: 90px;
line-height: 28px;
border-radius: 1px;
margin-left: 14px;
text-align: center;
color: #212121;
background: #e8e9eb;
cursor: pointer;
margin-top: 12px;
}
.down {
background: #0058e1;
color: #ffffff;
}
}
.hengxian { .hengxian {
width: 100%; width: 100%;
@ -374,29 +559,30 @@
background: rgba(150, 144, 144, 0.3); background: rgba(150, 144, 144, 0.3);
margin-top: 0.2rem; margin-top: 0.2rem;
} }
.searchImg{
.searchImg {
width: 17px; width: 17px;
height: 17px; height: 17px;
background: url('~@/assets/home/searchInner.png'); background: url('~@/assets/home/searchInner.png');
position: absolute; position: absolute;
top: 119px; top: 85px;
left: 500px; left: 668px;
}
} }
} }
}
.resultListSearchInput { .resultListSearchInput {
margin-left: 0.1rem; margin-left: 0.1rem;
:deep(.ant-input) { :deep(.ant-input) {
width: 4rem; width: 340px;
height: 0.32rem; height: 0.32rem;
background: #fff; background: #fff;
border-radius: 0.02rem; border-radius: 0.02rem;
} }
:deep(.ant-input-search-button) { :deep(.ant-input-search-button) {
width: 0.8rem; // width: 56px;
height: 0.32rem; height: 0.32rem;
background: #0558e1; background: #0558e1;
border-radius: 0.02rem !important; border-radius: 0.02rem !important;
@ -410,12 +596,12 @@
:deep(.ant-input-group-addon) { :deep(.ant-input-group-addon) {
left: 0 !important; left: 0 !important;
} }
} }
.button-reset { .button-reset {
border: 0; border: 0;
outline: none; outline: none;
width: 0.8rem; width: 56px;
height: 0.32rem; height: 0.32rem;
//background: #e1edfa; //background: #e1edfa;
background: #0558e1; background: #0558e1;
@ -427,15 +613,15 @@
line-height: 0.32rem; line-height: 0.32rem;
margin-left: 2.5rem; margin-left: 2.5rem;
cursor: pointer; cursor: pointer;
} }
.details-pageconetent { .details-pageconetent {
height: 100%; height: 100%;
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin-top: 0.67rem; //margin-top: 0.67rem;
position: relative; position: relative;
background: rgba(245, 243, 243, 0.3); background: rgba(245, 243, 243, 0.3);
@ -454,7 +640,7 @@
position: relative; position: relative;
width: 11.5rem; width: 11.5rem;
display: flex; display: flex;
padding-top: 0.2rem; // padding-top: 0.2rem;
flex-direction: column; flex-direction: column;
font-size: 0.16rem; font-size: 0.16rem;
justify-content: left; justify-content: left;
@ -462,39 +648,19 @@
.pagination { .pagination {
background: #f3f5f9; background: #f3f5f9;
padding-bottom: 0.6rem; padding-top: 10px;
padding-bottom: 23px;
} }
.top-title {
padding: 0.2rem;
display: flex;
font-size: 18px;
.tabAll {
font-size: 18px;
color: #000000;
margin-right: 35px;
cursor: pointer;
} }
}
.tabAll:nth-child(1) { :deep(.ant-card-grid) {
margin-left: 20px;
}
.sel {
font-weight: 600;
color: #0087ff;
border-bottom: 0.02rem solid #0087ff;
}
}
}
}
:deep(.ant-card-grid) {
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
-webkit-line-clamp: 1; -webkit-line-clamp: 1;
word-break: break-all; word-break: break-all;
} }
</style> </style>

View File

@ -2,7 +2,10 @@
<template> <template>
<div class="IntegrationServicesDetails" :class="{ fixed2: scrollTop >= 600 }"> <div class="IntegrationServicesDetails" :class="{ fixed2: scrollTop >= 600 }">
<home-header></home-header> <home-header></home-header>
<detail-back v-show="!hiddenBackFlag" :returnType="returnType"></detail-back> <detail-back
v-show="!hiddenBackFlag"
:returnType="returnType"
></detail-back>
<!-- 头部基本信息 --> <!-- 头部基本信息 -->
<application-top-details <application-top-details
:dataList="detailInfoObj" :dataList="detailInfoObj"
@ -10,7 +13,7 @@
></application-top-details> ></application-top-details>
<!-- 导航 --> <!-- 导航 -->
<div :class="{ fixed: scrollTop >= 600 }"> <div :class="{ fixed: scrollTop >= 600 }" style="z-index: 10012">
<div class="application-navigation"> <div class="application-navigation">
<template v-for="nav in navList" :key="nav.key"> <template v-for="nav in navList" :key="nav.key">
<div <div

View File

@ -3,7 +3,7 @@
<div class="content-box"> <div class="content-box">
<!-- 提供服务 --> <!-- 提供服务 -->
<div class="img-bg service-box"> <div class="img-bg service-box">
<div class="title" style="margin-bottom: 20px"> <div class="title titleMargin">
<div class="text text-white">提供服务</div> <div class="text text-white">提供服务</div>
<div class="line line-white"></div> <div class="line line-white"></div>
</div> </div>
@ -32,7 +32,12 @@
<!-- 总体流程 --> <!-- 总体流程 -->
<TheOverallProcess></TheOverallProcess> <TheOverallProcess></TheOverallProcess>
<!-- imgList --> <!-- imgList -->
<div class="img-box" v-for="(item, i) in imgList" :key="i"> <div
class="img-box"
:class="item.btnText === '立即上架' ? '' : 'img-box-new'"
v-for="(item, i) in imgList"
:key="i"
>
<div class="title"> <div class="title">
<div class="text">{{ item.name }}</div> <div class="text">{{ item.name }}</div>
<div class="line"></div> <div class="line"></div>
@ -42,7 +47,12 @@
:class="item.className" :class="item.className"
:style="{ 'background-image': `url(${item.bgImg || ''})` }" :style="{ 'background-image': `url(${item.bgImg || ''})` }"
></div> ></div>
<div v-if="item.btnText" class="btn" @click="toWhere(item.name)"> <div
v-if="item.btnText"
class="btn"
:class="item.btnText === '立即上架' ? '' : 'btn-new'"
@click="toWhere(item.name)"
>
{{ item.btnText }} >> {{ item.btnText }} >>
</div> </div>
</div> </div>
@ -316,7 +326,6 @@
align-items: center; align-items: center;
height: 0.26rem; height: 0.26rem;
} }
.component-type-content { .component-type-content {
width: 100%; width: 100%;
height: unset; height: unset;
@ -420,6 +429,10 @@
color: #fff; color: #fff;
} }
} }
.titleMargin {
margin-bottom: 20px;
padding-top: 52px;
}
.btn { .btn {
width: 150px; width: 150px;
@ -432,14 +445,21 @@
border-radius: 2px; border-radius: 2px;
font-size: 16px; font-size: 16px;
cursor: pointer; cursor: pointer;
background: white;
&:hover { &:hover {
background: #e5eefc; background: #e5eefc;
} }
} }
.btn-new {
position: relative;
top: -104px;
}
.img-box { .img-box {
margin-bottom: 50px; margin-bottom: 0px;
}
.img-box-new {
margin-bottom: -60px;
} }
.service-box { .service-box {

View File

@ -195,7 +195,7 @@ onMounted(() => {
.new-guide-box { .new-guide-box {
position: absolute; position: absolute;
top: 300px; top: 375px;
right: 205px; right: 205px;
width: 74px; width: 74px;
height: 150px; height: 150px;

View File

@ -1,8 +1,8 @@
<!-- <!--
* @Author: hisense.liangjunhua * @Author: hisense.liangjunhua
* @Date: 2022-06-21 11:55:07 * @Date: 2022-06-21 11:55:07
* @LastEditors: hisense.liangjunhua * @LastEditors: Light
* @LastEditTime: 2022-07-27 15:57:26 * @LastEditTime: 2022-12-30 16:05:18
* @Description: 告诉大家这是什么 * @Description: 告诉大家这是什么
--> -->
<template> <template>
@ -15,7 +15,12 @@
</a-breadcrumb> </a-breadcrumb>
<div class="top"> <div class="top">
<div class="left"> <div class="left">
<div class="item" :class="{ select: selectNav == nav.key }" v-for="nav in navList" :key="nav.key"> <div
class="item"
:class="{ select: selectNav == nav.key }"
v-for="nav in navList"
:key="nav.key"
>
<i :class="nav.key" @click="changeNav(nav)"></i> <i :class="nav.key" @click="changeNav(nav)"></i>
<div>{{ nav.title + '(' + nav.num + ')' }}</div> <div>{{ nav.title + '(' + nav.num + ')' }}</div>
</div> </div>
@ -23,11 +28,25 @@
</div> </div>
<div class="btn"> <div class="btn">
<div class="left"> <div class="left">
<a-select ref="select" v-model:value="value" style="width: 120px" @focus="focus" @change="handleChange"> <a-select
ref="select"
v-model:value="value"
style="width: 120px"
@focus="focus"
@change="handleChange"
>
<a-select-option value="全部消息">全部消息</a-select-option> <a-select-option value="全部消息">全部消息</a-select-option>
<a-select-option value="已读消息">已读消息</a-select-option> <a-select-option value="已读消息">已读消息</a-select-option>
<a-select-option value="未读消息">未读消息</a-select-option> <a-select-option value="未读消息">未读消息</a-select-option>
</a-select> </a-select>
<a-checkbox
:checked="
selectData.length !== 0 && selectData.length === data.length
"
stlye="margin-right:0.3rem;"
@change="changeCheckAll()"
></a-checkbox>
<div style="margin-left: 10px">全选当前页</div>
<div class="check"> <div class="check">
<div> <div>
@ -37,26 +56,30 @@
</div> </div>
</div> </div>
<div class="right"> <div class="right">
<a-checkbox :checked="
selectData.length !== 0 && selectData.length === data.length
" stlye="margin-right:0.3rem;" @change="changeCheckAll()"></a-checkbox>
<div>全选当前页</div>
<span @click="read()">标记为已读</span> <span @click="read()">标记为已读</span>
</div> </div>
</div> </div>
<div class="main-box">
<div class="main"> <div class="main">
<a-list item-layout="horizontal" :data-source="data"> <a-list item-layout="horizontal" :data-source="data">
<template #renderItem="{ item }" @click="goNoticePage(item)"> <template #renderItem="{ item }" @click="goNoticePage(item)">
<a-list-item> <a-list-item>
<a-list-item-meta description=""> <a-list-item-meta description="">
<template #title> <template #title>
<div class="left" @click="read(item)" :class="item.readStatus === 0 ? 'bold-text' : ''"> <div
class="left"
@click="read(item)"
:class="item.readStatus === 0 ? 'bold-text' : ''"
>
{{ item.content }} {{ item.content }}
</div> </div>
<div class="right">{{ '发布时间:' + item.senderDate }}</div> <div class="right">{{ '发布时间:' + item.senderDate }}</div>
</template> </template>
<template #avatar> <template #avatar>
<a-checkbox :checked="item.checked" @change="changeCheckBox(item)"></a-checkbox> <a-checkbox
:checked="item.checked"
@change="changeCheckBox(item)"
></a-checkbox>
<a-badge dot :offset="[-30, 5]" v-show="item.readStatus == 0"> <a-badge dot :offset="[-30, 5]" v-show="item.readStatus == 0">
<a-avatar :src="item.src" /> <a-avatar :src="item.src" />
</a-badge> </a-badge>
@ -67,23 +90,30 @@
</template> </template>
</a-list> </a-list>
</div> </div>
<a-pagination v-model:current="pageNum" v-model:pageSize="pageSize" :total="total" show-less-items </div>
:show-size-changer="false" @change="changePageNum" /> <a-pagination
v-model:current="pageNum"
v-model:pageSize="pageSize"
:total="total"
show-less-items
:show-size-changer="false"
@change="changePageNum"
/>
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref, reactive, onBeforeUnmount } from 'vue' import { ref, reactive, onBeforeUnmount } from 'vue'
import mybus from '@/myplugins/mybus' import mybus from '@/myplugins/mybus'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import { mynotice, mynoticeRead } from '@/api/home' import { mynotice, mynoticeRead } from '@/api/home'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
const router = useRouter() const router = useRouter()
const total = ref(0) const total = ref(0)
const pageSize = ref(8) const pageSize = ref(8)
const pageNum = ref(1) const pageNum = ref(1)
const value = ref('全部消息') const value = ref('全部消息')
const obj = reactive({ page: pageNum.value, limit: pageSize.value }) const obj = reactive({ page: pageNum.value, limit: pageSize.value })
const navList = reactive([ const navList = reactive([
{ {
title: '全部', title: '全部',
key: 'all', key: 'all',
@ -104,11 +134,11 @@ const navList = reactive([
key: 'other', key: 'other',
num: 0, num: 0,
}, },
]) ])
const selectNav = ref('all') const selectNav = ref('all')
const selectData = ref([]) const selectData = ref([])
const data = ref([]) const data = ref([])
const changeNav = (nav) => { const changeNav = (nav) => {
selectNav.value = nav.key selectNav.value = nav.key
if (nav.key === 'all') { if (nav.key === 'all') {
delete obj.from delete obj.from
@ -118,16 +148,16 @@ const changeNav = (nav) => {
value.value = '全部消息' value.value = '全部消息'
delete obj.readStatus delete obj.readStatus
init() init()
} }
const changeCheckBox = (item) => { const changeCheckBox = (item) => {
item.checked = !item.checked item.checked = !item.checked
if (item.checked) { if (item.checked) {
selectData.value.push(item.id) selectData.value.push(item.id)
} else { } else {
selectData.value = selectData.value.filter((val) => val !== item.id) selectData.value = selectData.value.filter((val) => val !== item.id)
} }
} }
const changeCheckAll = () => { const changeCheckAll = () => {
if (selectData.value.length == data.value.length) { if (selectData.value.length == data.value.length) {
selectData.value = [] selectData.value = []
data.value.forEach((val) => { data.value.forEach((val) => {
@ -140,13 +170,13 @@ const changeCheckAll = () => {
selectData.value.push(val.id) selectData.value.push(val.id)
}) })
} }
} }
const changePageNum = (page) => { const changePageNum = (page) => {
pageNum.value = page pageNum.value = page
obj.page = pageNum.value obj.page = pageNum.value
init() init()
} }
const handleChange = () => { const handleChange = () => {
pageNum.value = 1 pageNum.value = 1
obj.page = pageNum.value obj.page = pageNum.value
switch (value.value) { switch (value.value) {
@ -164,19 +194,19 @@ const handleChange = () => {
break break
} }
init() init()
} }
const goBack = (url) => { const goBack = (url) => {
router.push({ router.push({
path: url, path: url,
}) })
} }
// //
let applyStateObj = { let applyStateObj = {
0: '待办', 0: '待办',
1: '已办', 1: '已办',
} }
let typeObj = { let typeObj = {
0: '申请前台', 0: '申请前台',
1: '申请后台', 1: '申请后台',
2: '上架前台', 2: '上架前台',
@ -189,56 +219,56 @@ let typeObj = {
9: '评论后台', 9: '评论后台',
10: '会客厅前台', 10: '会客厅前台',
11: '会客厅后台', 11: '会客厅后台',
12: '其他' 12: '其他',
} }
// //
let pageObj = { let pageObj = {
'申请后台': { 申请后台: {
0: 'myAgent-CompetencyApplication', 0: 'myAgent-CompetencyApplication',
1: 'hasToDoTasks-CompetencyApplication', 1: 'hasToDoTasks-CompetencyApplication',
}, },
'上架后台': { 上架后台: {
0: 'myAgent-AbilityResourceShelf', 0: 'myAgent-AbilityResourceShelf',
1: 'hasToDoTasks-AbilityResourceShelf', 1: 'hasToDoTasks-AbilityResourceShelf',
}, },
'下架后台': { 下架后台: {
0: 'myAgent-AbilityResourcesRemoved', 0: 'myAgent-AbilityResourcesRemoved',
1: 'hasToDoTasks-AbilityResourcesRemoved', 1: 'hasToDoTasks-AbilityResourcesRemoved',
}, },
'需求后台': { 需求后台: {
0: 'myAgent-ApplicationforCompetencyRequirements', 0: 'myAgent-ApplicationforCompetencyRequirements',
1: 'hasToDoTasks-ApplicationForCompetencyRequirements', 1: 'hasToDoTasks-ApplicationForCompetencyRequirements',
}, },
'评论后台': { 评论后台: {
0: 'myAgent-CommentModeration', 0: 'myAgent-CommentModeration',
1: 'hasToDoTasks-CommentModeration', 1: 'hasToDoTasks-CommentModeration',
}, },
'会客厅后台': { 会客厅后台: {
0: 'activiti-RoomExamineAdmin', 0: 'activiti-RoomExamineAdmin',
1: 'activiti-RoomExamineAdmin', 1: 'activiti-RoomExamineAdmin',
}, },
} }
// tab // tab
const tabTypeObj = { const tabTypeObj = {
'申请前台': '能力申请', 申请前台: '能力申请',
'上架前台': '能力上架', 上架前台: '能力上架',
'下架前台': '能力下架', 下架前台: '能力下架',
'需求前台': '需求评论', 需求前台: '需求评论',
'评论前台': '需求评论', 评论前台: '需求评论',
'会客厅前台': '会客厅前台' 会客厅前台: '会客厅前台',
} }
// //
const goPage = (item) => { const goPage = (item) => {
if (item.jumpUrl && item.type !== 12) { if (item.jumpUrl && item.type !== 12) {
let typeText = typeObj[item.type]; let typeText = typeObj[item.type]
console.log('item------------>', item); console.log('item------------>', item)
console.log('typeText类型------------>', typeText); console.log('typeText类型------------>', typeText)
// "http://192.168.124.236:9796/#/personalCenter?tabTypeName=" // "http://192.168.124.236:9796/#/personalCenter?tabTypeName="
let _url = item.jumpUrl && item.jumpUrl.split('#') let _url = item.jumpUrl && item.jumpUrl.split('#')
let openType = '_self'; let openType = '_self'
// //
if (typeText && typeText.indexOf('后台') !== -1) { if (typeText && typeText.indexOf('后台') !== -1) {
openType = '_blank' openType = '_blank'
@ -248,9 +278,8 @@ const goPage = (item) => {
} }
} }
window.open(item.jumpUrl, openType) window.open(item.jumpUrl, openType)
} }
return; return
// if (typeText) { // if (typeText) {
// console.log('typeText------------>', typeText); // console.log('typeText------------>', typeText);
// // // //
@ -279,10 +308,10 @@ const goPage = (item) => {
// } // }
// } // }
} }
// //
const read = (item) => { const read = (item) => {
if (selectData.value.length === 0 && !item) { if (selectData.value.length === 0 && !item) {
return message.error('未选择消息!') return message.error('未选择消息!')
} }
@ -292,7 +321,8 @@ const read = (item) => {
if (item.readStatus === 1) { if (item.readStatus === 1) {
return goPage(item) return goPage(item)
} }
mynoticeRead(item.id).then((res) => { mynoticeRead(item.id)
.then((res) => {
if (res.data.code == 0) { if (res.data.code == 0) {
message.success('通知已读!') message.success('通知已读!')
mybus.emit('getMynotice') mybus.emit('getMynotice')
@ -304,7 +334,8 @@ const read = (item) => {
} else { } else {
message.error('操作失败!') message.error('操作失败!')
} }
}).catch(err => { })
.catch((err) => {
message.error(err) message.error(err)
}) })
} else { } else {
@ -321,8 +352,8 @@ const read = (item) => {
}) })
}) })
} }
} }
const init = () => { const init = () => {
// from readStatus 0 1 // from readStatus 0 1
mynotice(obj).then((res) => { mynotice(obj).then((res) => {
console.log('消息=============>', res.data.data) console.log('消息=============>', res.data.data)
@ -340,8 +371,8 @@ const init = () => {
total.value = res.data.data.total total.value = res.data.data.total
selectData.value = [] selectData.value = []
}) })
} }
navList.forEach((val) => { navList.forEach((val) => {
if (val.title === '全部') { if (val.title === '全部') {
mynotice({ page: pageNum.value, limit: pageSize.value }).then((res) => { mynotice({ page: pageNum.value, limit: pageSize.value }).then((res) => {
val.num = res.data.data.total val.num = res.data.data.total
@ -355,17 +386,17 @@ navList.forEach((val) => {
val.num = res.data.data.total val.num = res.data.data.total
}) })
} }
}) })
init()
mybus.on('noticeListInit', () => {
init() init()
}) mybus.on('noticeListInit', () => {
onBeforeUnmount(() => { init()
})
onBeforeUnmount(() => {
mybus.off('noticeListInit') mybus.off('noticeListInit')
}) })
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.notice-list { .notice-list {
padding: 0.64rem 0 0; padding: 0.64rem 0 0;
background: #f4f5f8; background: #f4f5f8;
@ -380,11 +411,8 @@ onBeforeUnmount(() => {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.left { .left {
display: flex; display: flex;
.item { .item {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -452,19 +480,19 @@ onBeforeUnmount(() => {
.btn { .btn {
background: #fff; background: #fff;
margin-top: 0.16rem; margin-top: 0.16rem;
padding: 0.14rem 3.1rem 0; padding: 0.14rem 3.1rem 0.1rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.left { .left {
display: flex; display: flex;
align-items: center; align-items: center;
& > div:nth-of-type(2) {
margin-right: 10px;
}
.ant-select { .ant-select {
margin-right: 0.24rem; margin-right: 0.24rem;
} }
.check { .check {
display: flex; display: flex;
align-items: center; align-items: center;
@ -507,12 +535,14 @@ onBeforeUnmount(() => {
} }
} }
.main-box {
background: #fff;
.main { .main {
background: #fff; background: #fff;
padding: 0 3.1rem; margin: 0 3.1rem;
height: 4.75rem; height: 4.75rem;
overflow-y: scroll; overflow-y: scroll;
border-top: 1px solid #dddee1;
:deep(.ant-list-item-meta) { :deep(.ant-list-item-meta) {
display: flex; display: flex;
align-items: center; align-items: center;
@ -553,11 +583,12 @@ onBeforeUnmount(() => {
} }
} }
} }
}
.ant-pagination { .ant-pagination {
background: #fff; background: #fff;
margin-top: 0; margin-top: 0;
padding: 0.2rem 0 0.2rem; padding: 0.2rem 0 0.2rem;
} }
} }
</style> </style>

View File

@ -619,7 +619,13 @@
right: 0rem; right: 0rem;
} }
} }
@media only screen and (min-width: 1921px) and (max-width: 3840px) { @media only screen and (min-width: 1921px) and (max-width: 2560px) {
.fixedmount {
bottom: 1.56rem;
right: 0.37rem;
}
}
@media only screen and (min-width: 2561px) and (max-width: 3840px) {
.fixedmount { .fixedmount {
bottom: 1.56rem; bottom: 1.56rem;
right: 9.6rem; right: 9.6rem;

View File

@ -118,7 +118,7 @@
</div> </div>
<!-- // todo --> <!-- // todo -->
<span class="time"> <span class="time">
<span v-if="!itShowXiHaiAn"> <span class="time-line" v-if="!itShowXiHaiAn">
加购时间:{{ item.time }} 加购时间:{{ item.time }}
</span> </span>
<a-popconfirm <a-popconfirm
@ -128,7 +128,7 @@
@confirm="handleDelete(item, valIndex)" @confirm="handleDelete(item, valIndex)"
@cancel="cancel" @cancel="cancel"
> >
<a-button <!-- <a-button
type="primary" type="primary"
style=" style="
width: 0.7rem; width: 0.7rem;
@ -141,7 +141,8 @@
@click="del" @click="del"
> >
删除 删除
</a-button> </a-button> -->
<span class="del-record" @click="del"></span>
</a-popconfirm> </a-popconfirm>
</span> </span>
<svg <svg
@ -852,13 +853,32 @@
margin-left: 0.3rem; margin-left: 0.3rem;
font-size: 0.12rem; font-size: 0.12rem;
color: #ccc; color: #ccc;
display: flex;
align-content: center;
.time-line{
line-height: 32px;
}
.del-record {
width:32px;
height: 32px;
background: url('~@/assets/home/del.png') no-repeat;
cursor: pointer;
background-size: 100%;
margin-left: 0.12rem;
&:hover{
background: url('~@/assets/home/del-on.png') no-repeat;
}
}
} }
.type { .type {
margin-left: 0.1rem; margin-left: 0.1rem;
padding: 0.03rem 0.1rem; padding: 0.03rem 0.1rem;
background: #00a7e3; background: #00a7e3;
border-radius: 3px;
// background: linear-gradient(-80deg, transparent 10%, #00a7e3 10%, #00a7e3 90%, transparent 0);
color: #fff; color: #fff;
transform: skewX(-10deg);
} }
:deep(.ant-list-item-meta-description) { :deep(.ant-list-item-meta-description) {
@ -929,7 +949,7 @@
} }
.sousuokuang { .sousuokuang {
width: 3.25rem; width: 3.13rem;
margin: 0.1rem 0rem 0.21rem 0.2rem; margin: 0.1rem 0rem 0.21rem 0.2rem;
.ant-input-search { .ant-input-search {
@ -1104,6 +1124,7 @@
width: 1rem; width: 1rem;
height: 0.36rem; height: 0.36rem;
border-radius: 2px; border-radius: 2px;
margin-left: 0.12rem;
background: #fff; background: #fff;
color: #0558e1; color: #0558e1;
} }
@ -1114,4 +1135,5 @@
margin-left: 0.12rem; margin-left: 0.12rem;
border-radius: 2px; border-radius: 2px;
} }
</style> </style>