|
@@ -14,6 +14,9 @@
|
|
|
<div class="right-box">
|
|
|
<div class="resource">
|
|
|
<div class="resource-title">关联资源</div>
|
|
|
+ <div class="changebtn" v-show="uploadList.length !==0" @click="changes">
|
|
|
+ <el-button type="primary" size="small ">存储变更</el-button>
|
|
|
+ </div>
|
|
|
<div class="resourceadd-box">
|
|
|
<el-dropdown>
|
|
|
<span class="el-dropdown-link">
|
|
@@ -31,7 +34,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="resourcebox" v-if="datais">
|
|
|
- <div class="resource-item" v-for="(item,index) in curNode" :key="item.id" @click=details(item)>
|
|
|
+ <div class="resource-item" v-for="(item,index) in curNode" :key="item.id">
|
|
|
<img src="@/assets/icon/image.png" v-if="item.type === 'image'" />
|
|
|
<img src="@/assets/icon/word.png" v-else-if="item.type === 'doc' && docType.includes(getSuffix(item.title))" />
|
|
|
<img src="@/assets/icon/excel.png" v-else-if="item.type === 'doc' && excelType.includes(getSuffix(item.title))" />
|
|
@@ -45,13 +48,13 @@
|
|
|
<img src="@/assets/icon/zip.png" v-else-if="item.type === 'res'" />
|
|
|
<img src="@/assets/icon/image.png" v-else-if="item.type === 'thum'" />
|
|
|
<img src="@/assets/icon/unknow.png" v-else="item.type === 'other'" />
|
|
|
- <span class="title-name">{{index+1}}、{{item.title}}</span>
|
|
|
+ <span class="title-name" @click=details(item)>{{index+1}}、{{item.title}}</span>
|
|
|
<div class="resource-tools">
|
|
|
<!-- <div class="node-resource-tool" >
|
|
|
<Icon type="md-eye" />
|
|
|
<span>{{ $t('syllabus.preview') }}</span>
|
|
|
</div> -->
|
|
|
- <div class="resource-tool" @click="onDeleteResource(item,index)">
|
|
|
+ <div class="resource-tool" @click="deleteResource(item,index)">
|
|
|
<i class="el-icon-delete-solid"></i>
|
|
|
<span>删除</span>
|
|
|
</div>
|
|
@@ -95,7 +98,7 @@
|
|
|
</div>
|
|
|
</el-upload>
|
|
|
<div class="upload-submitbtn">
|
|
|
- <el-button type="primary" @click="confirmUpload">确认上传</el-button>
|
|
|
+ <el-button type="primary" @click="confirmUpload(),uploadBtn=true" :loading="uploadBtn">确认上传</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
@@ -103,8 +106,9 @@
|
|
|
</template>
|
|
|
<script>
|
|
|
import { ref, reactive, onMounted, getCurrentInstance, watch, nextTick } from 'vue'
|
|
|
-import { ElMessageBox } from 'element-plus'
|
|
|
+import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
import { useStore } from 'vuex'
|
|
|
+import BlobTool from '@/until/blobTool.js'
|
|
|
export default {
|
|
|
props: {
|
|
|
tree: {
|
|
@@ -126,6 +130,9 @@ export default {
|
|
|
type: Array,
|
|
|
default: null,
|
|
|
},
|
|
|
+ areaId: {
|
|
|
+ default: null,
|
|
|
+ },
|
|
|
},
|
|
|
setup(props, context) {
|
|
|
let curNode = ref(null)
|
|
@@ -150,44 +157,25 @@ export default {
|
|
|
url: '',
|
|
|
type: '',
|
|
|
})
|
|
|
- let nowPitchCb = ref({})
|
|
|
+ let nowPitchCb = ref()
|
|
|
let datais = ref(false)
|
|
|
let uploadFiles = ref(false)
|
|
|
let fileList = ref({
|
|
|
id: '',
|
|
|
title: '',
|
|
|
})
|
|
|
+ let uploadFileData = ref({})
|
|
|
+ let uploadBtn = ref(false)
|
|
|
+ let uploadList = ref([])
|
|
|
+ let changeShow = ref(false)
|
|
|
+ let BlobContent = ref({})
|
|
|
onMounted(() => {
|
|
|
resourceData = resourceData.push(...props.tree)
|
|
|
console.log(props.tree, '树状')
|
|
|
})
|
|
|
- // let tree = reactive([{
|
|
|
- // label: '1.第一章',
|
|
|
- // children: [
|
|
|
- // {
|
|
|
- // label: '1.1 第一节',
|
|
|
- // children: [
|
|
|
- // {
|
|
|
- // label: '1.1.1 哈哈哈哈哈',
|
|
|
- // },
|
|
|
- // ],
|
|
|
- // },
|
|
|
- // ],
|
|
|
- // }, {
|
|
|
- // label: '2.第二章',
|
|
|
- // children: [
|
|
|
- // {
|
|
|
- // label: '2.1 第一节',
|
|
|
- // children: [
|
|
|
- // {
|
|
|
- // label: '2.1.1 详细信息显示',
|
|
|
- // },
|
|
|
- // ],
|
|
|
- // },
|
|
|
- // ],
|
|
|
- // }])
|
|
|
-
|
|
|
+ //添加子节点
|
|
|
function append(data) {
|
|
|
+ console.log(data, '传进方法的内容')
|
|
|
console.log(props, '获取到的')
|
|
|
let datas = data
|
|
|
let user = JSON.parse(localStorage.getItem('userData'))
|
|
@@ -239,51 +227,93 @@ export default {
|
|
|
idInfo = props.datas[x].id
|
|
|
}
|
|
|
}
|
|
|
- let abilitiesInfo = []
|
|
|
let dataInfo = { abilityId: abilityIds, auth: [], codeval: codeVals, scope: scopes, id: idInfo, trees: chidData }
|
|
|
let datas = { tmdId: user.tmdId, tmdName: user.tmdName, standard: props.stand, abilityTask: [dataInfo] }
|
|
|
proxy.$api.addChild(datas).then((res) => {
|
|
|
console.log(res, '增加子节点的返回')
|
|
|
+ res.state === 200 ? ElMessage.success('节点添加成功') : ''
|
|
|
})
|
|
|
console.log(datas, '参数')
|
|
|
})
|
|
|
.catch(() => {})
|
|
|
}
|
|
|
+ //删除子节点
|
|
|
function remove(node, data) {
|
|
|
+ console.log(props, '获取现在的树状')
|
|
|
+ console.log(nowPitchCb.value, '当前的数据')
|
|
|
let user = JSON.parse(localStorage.getItem('userData'))
|
|
|
console.log(props.stand, '删除查看当前的')
|
|
|
console.log(node, data)
|
|
|
- ElMessageBox.confirm('确定要删除节点吗?', '注意', {
|
|
|
+ ElMessageBox.confirm('确定要删除节点吗?', '温馨提示', {
|
|
|
confirmButtonText: '确认',
|
|
|
cancelButtonText: '取消',
|
|
|
type: 'warning',
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- let datai = { tmdId: user.tmdId, tmdName: user.tmdName, standard: props.stand, id: data.id }
|
|
|
- proxy.$api.removeChildnodes(datai).then((res) => {
|
|
|
- console.log(res, '删除返回')
|
|
|
+ }).then(() => {
|
|
|
+ let receiveData = data
|
|
|
+ const result = props.tree.every((item) => {
|
|
|
+ return item.pid === receiveData.pid
|
|
|
+ })
|
|
|
+ console.log(result, '得到的结果')
|
|
|
+ if (result) {
|
|
|
+ deleteChapter(props.stand, receiveData.id, node)
|
|
|
+ } else {
|
|
|
+ let dataEvalue = nowPitchCb.value
|
|
|
+ let user = JSON.parse(localStorage.getItem('userData'))
|
|
|
+ let chidData = []
|
|
|
+ //寻找最上级
|
|
|
+ for (let i in props.tree) {
|
|
|
+ let dataOne = props.tree[i]
|
|
|
+ if (dataEvalue.id === dataOne.id) {
|
|
|
+ chidData.push(dataOne)
|
|
|
+ } else if (dataEvalue.id !== dataOne.id && dataOne.children.length !== 0) {
|
|
|
+ for (let y in dataOne.children) {
|
|
|
+ if (dataEvalue.id === dataOne.children[y].id) {
|
|
|
+ chidData.push(dataOne)
|
|
|
+ } else if (dataEvalue.id !== dataOne.children[y].id && dataOne.children[y].children.length !== 0) {
|
|
|
+ for (let u in dataOne.children[y].children) {
|
|
|
+ dataEvalue.id === dataOne.children[y].children[u].id ? chidData.push(dataOne) : ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //准备API参数
|
|
|
+ let codeVals = ''
|
|
|
+ let abilityIds = ''
|
|
|
+ let scopes = ''
|
|
|
+ let idInfo = ''
|
|
|
+ for (let x in props.datas) {
|
|
|
+ if (chidData[0].id === props.datas[x].id) {
|
|
|
+ codeVals = props.datas[x].codeval
|
|
|
+ abilityIds = props.datas[x].abilityId
|
|
|
+ scopes = props.datas[x].scope
|
|
|
+ idInfo = props.datas[x].id
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let dataInfo = { abilityId: abilityIds, auth: [], codeval: codeVals, scope: scopes, id: idInfo, trees: chidData }
|
|
|
+ let datas = { tmdId: user.tmdId, tmdName: user.tmdName, standard: props.stand, abilityTask: [dataInfo] }
|
|
|
+ proxy.$api.addChild(datas).then((res) => {
|
|
|
+ console.log(res, '删除子节点的返回')
|
|
|
+ res.state === 200 ? ElMessage.success('节点删除成功') : ElMessage.error('节点删除失败')
|
|
|
})
|
|
|
const parent = node.parent
|
|
|
const children = parent.data.children || parent.data
|
|
|
const index = children.findIndex((d) => d.id === data.id)
|
|
|
children.splice(index, 1)
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- ElMessage({
|
|
|
- type: 'info',
|
|
|
- message: 'Delete canceled',
|
|
|
- })
|
|
|
- })
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
- //
|
|
|
function handleNodeClick(data) {
|
|
|
console.log(data, '当前点击的元素')
|
|
|
curNode.value = data.rnodes
|
|
|
+ console.log(curNode.value, '资源数据')
|
|
|
fileList.value.id = data.id
|
|
|
fileList.value.title = data.title
|
|
|
+ nowPitchCb.value = data
|
|
|
data.rnodes.length ? (datais.value = true) : (datais.value = false)
|
|
|
// console.log(curNode.value.title)
|
|
|
}
|
|
|
+ //渲染tree
|
|
|
function renderContent(h, { node, data }) {
|
|
|
return h(
|
|
|
'span',
|
|
@@ -330,11 +360,13 @@ export default {
|
|
|
//查看资源详情
|
|
|
function details(val) {
|
|
|
// detailsInfo = val
|
|
|
+ console.log(val, '查看详情传进来的值')
|
|
|
console.log(detailsInfo, '赋值过后')
|
|
|
detailsInfo.value = {}
|
|
|
let bolbs = JSON.parse(localStorage.getItem('blobInfo'))
|
|
|
let host = getBlobHost(bolbs.osblob_uri)
|
|
|
- let urls = host + '/' + val.cntr + val.link + '?' + bolbs.osblob_sas
|
|
|
+ let space = bolbs.osblob_uri.slice(bolbs.osblob_uri.indexOf('cn') + 3)
|
|
|
+ let urls = host + '/' + space + val.link + '?' + bolbs.osblob_sas
|
|
|
if (getSuffix(val.title.toLowerCase()) == 'pdf') {
|
|
|
window.open('https://www.teammodel.cn/web/viewer.html?file=' + encodeURIComponent(urls))
|
|
|
} else if (val.type === 'doc') {
|
|
@@ -350,20 +382,148 @@ export default {
|
|
|
//上传资源
|
|
|
function uploadResource(val) {
|
|
|
console.log(val, '触发了')
|
|
|
- fileList.value.push({ name: val.raw.name, size: val.raw.size, type: val.raw.type })
|
|
|
+ uploadFileData.value = val.raw
|
|
|
+ // fileList.value.push({ name: val.raw.name, size: val.raw.size, type: val.raw.type })
|
|
|
// fileList.value.push(val)
|
|
|
// return true
|
|
|
}
|
|
|
//确认上传
|
|
|
function confirmUpload() {
|
|
|
let urlHost = JSON.parse(localStorage.getItem('blobInfo'))
|
|
|
+ let urlheader = urlHost.osblob_uri.substring(0, urlHost.osblob_uri.indexOf('cn') + 2)
|
|
|
+ let space = urlHost.osblob_uri.slice(urlHost.osblob_uri.indexOf('cn') + 3)
|
|
|
let standard = props.stand
|
|
|
- let nowid = curNode.value
|
|
|
+ let nowid = fileList.value.id
|
|
|
console.log(nowid)
|
|
|
- let url = urlHost.osblob_uri + '/yxpt/' + standard + '/jyzx/' + nowid + '/' + fileList.value[0].name + '?/' + urlHost.osblob_sas
|
|
|
+ let url = urlHost.osblob_uri + '/yxpt/' + standard + '/jyzx/' + nowid + '/' + uploadFileData.value.name + '?/' + urlHost.osblob_sas
|
|
|
console.log(url, '上传地址')
|
|
|
+ let Blobs = new BlobTool(urlheader, space, '?' + urlHost.osblob_sas, 'school')
|
|
|
+ BlobContent.value = Blobs
|
|
|
+ let path = 'yxpt/' + standard + '/jyzx/' + nowid
|
|
|
+ Blobs.upload(uploadFileData.value, path, {}, false, props.areaId).then((res) => {
|
|
|
+ console.log(res, '上传成功的返回')
|
|
|
+ res.url ? ElMessage.success('上传成功') : ElMessage.error('上传失败')
|
|
|
+ uploadList.value.push(res)
|
|
|
+ let datas = curNode.value
|
|
|
+ datas.push({ title: res.name, link: res.blob, size: res.size, type: res.type, id: guid(), cntr: 'teammodelos' })
|
|
|
+ curNode.value = datas
|
|
|
+ uploadBtn.value = false
|
|
|
+ uploadFiles.value = false
|
|
|
+ console.log(props, '后面的数据')
|
|
|
+ })
|
|
|
}
|
|
|
- //添加当前父节点
|
|
|
+ //存储变更
|
|
|
+ function changes() {
|
|
|
+ let data = nowPitchCb.value
|
|
|
+ let user = JSON.parse(localStorage.getItem('userData'))
|
|
|
+ console.log(data, '变更数据')
|
|
|
+ let chidData = []
|
|
|
+ //寻找最上级
|
|
|
+ for (let i in props.tree) {
|
|
|
+ let dataOne = props.tree[i]
|
|
|
+ if (data.id === dataOne.id) {
|
|
|
+ chidData.push(dataOne)
|
|
|
+ } else if (data.id !== dataOne.id && dataOne.children.length !== 0) {
|
|
|
+ for (let y in dataOne.children) {
|
|
|
+ if (data.id === dataOne.children[y].id) {
|
|
|
+ chidData.push(dataOne)
|
|
|
+ } else if (data.id !== dataOne.children[y].id && dataOne.children[y].children.length !== 0) {
|
|
|
+ for (let u in dataOne.children[y].children) {
|
|
|
+ data.id === dataOne.children[y].children[u].id ? chidData.push(dataOne) : ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //准备API参数
|
|
|
+ let codeVals = ''
|
|
|
+ let abilityIds = ''
|
|
|
+ let scopes = ''
|
|
|
+ let idInfo = ''
|
|
|
+ for (let x in props.datas) {
|
|
|
+ if (chidData[0].id === props.datas[x].id) {
|
|
|
+ console.log(props.datas[x].id, '进入的值')
|
|
|
+ codeVals = props.datas[x].codeval
|
|
|
+ abilityIds = props.datas[x].abilityId
|
|
|
+ scopes = props.datas[x].scope
|
|
|
+ idInfo = props.datas[x].id
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let dataInfo = { abilityId: abilityIds, auth: [], codeval: codeVals, scope: scopes, id: idInfo, trees: chidData }
|
|
|
+ let datas = { tmdId: user.tmdId, tmdName: user.tmdName, standard: props.stand, abilityTask: [dataInfo] }
|
|
|
+ proxy.$api.addChild(datas).then((res) => {
|
|
|
+ console.log(res, '存储变更的返回')
|
|
|
+ res.state === 200 ? (ElMessage.success('储存变更成功'), (uploadList.value = [])) : ElMessage.error('储存变更失败')
|
|
|
+ })
|
|
|
+ }
|
|
|
+ //删除资源
|
|
|
+ function deleteResource(val, index) {
|
|
|
+ let urlHost = JSON.parse(localStorage.getItem('blobInfo'))
|
|
|
+ let urlheader = urlHost.osblob_uri.substring(0, urlHost.osblob_uri.indexOf('cn') + 2)
|
|
|
+ let space = urlHost.osblob_uri.slice(urlHost.osblob_uri.indexOf('cn') + 3)
|
|
|
+ console.log(val, index, '删除的信息')
|
|
|
+ ElMessageBox.confirm('确定要移除该资源吗?', '温馨提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning',
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ console.log(BlobContent.value, 'BLOB的信息')
|
|
|
+ let user = JSON.parse(localStorage.getItem('userData'))
|
|
|
+ let blobs = {}
|
|
|
+ BlobContent.value.containerClient ? (blobs = BlobContent.value) : ((blobs = new BlobTool(urlheader, space, '?' + urlHost.osblob_sas, 'school')), (BlobContent.value = blobs))
|
|
|
+ blobs.deleteBlob(val.link).then((res) => {
|
|
|
+ console.log(res, '删除的返回')
|
|
|
+ if (res === 200) {
|
|
|
+ curNode.value.splice(index, 1)
|
|
|
+ let data = nowPitchCb.value
|
|
|
+ console.log(props, '现在的数据')
|
|
|
+ console.log(data, '现在选中的')
|
|
|
+ let chidData = []
|
|
|
+ for (let i in props.tree) {
|
|
|
+ let dataOne = props.tree[i]
|
|
|
+ if (data.id === dataOne.id) {
|
|
|
+ chidData.push(dataOne)
|
|
|
+ } else if (data.id !== dataOne.id && dataOne.children.length !== 0) {
|
|
|
+ for (let y in dataOne.children) {
|
|
|
+ if (data.id === dataOne.children[y].id) {
|
|
|
+ chidData.push(dataOne)
|
|
|
+ } else if (data.id !== dataOne.children[y].id && dataOne.children[y].children.length !== 0) {
|
|
|
+ for (let u in dataOne.children[y].children) {
|
|
|
+ data.id === dataOne.children[y].children[u].id ? chidData.push(dataOne) : ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //准备API参数
|
|
|
+ let codeVals = ''
|
|
|
+ let abilityIds = ''
|
|
|
+ let scopes = ''
|
|
|
+ let idInfo = ''
|
|
|
+ for (let x in props.datas) {
|
|
|
+ if (chidData[0].id === props.datas[x].id) {
|
|
|
+ console.log(props.datas[x].id, '进入的值')
|
|
|
+ codeVals = props.datas[x].codeval
|
|
|
+ abilityIds = props.datas[x].abilityId
|
|
|
+ scopes = props.datas[x].scope
|
|
|
+ idInfo = props.datas[x].id
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let dataInfo = { abilityId: abilityIds, auth: [], codeval: codeVals, scope: scopes, id: idInfo, trees: chidData }
|
|
|
+ let datas = { tmdId: user.tmdId, tmdName: user.tmdName, standard: props.stand, abilityTask: [dataInfo] }
|
|
|
+ proxy.$api.addChild(datas).then((res) => {
|
|
|
+ console.log(res, '删除的API返回')
|
|
|
+ res.state === 200 ? ElMessage.success('删除成功') : ElMessage.error('删除失败')
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ ElMessage.warning('删除失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ .catch(() => {})
|
|
|
+ }
|
|
|
+ //添加当前父节点(tree一级@章节)
|
|
|
function addFirstnode() {
|
|
|
let user = JSON.parse(localStorage.getItem('userData'))
|
|
|
ElMessageBox.prompt('输入新的章节节点名称', '新增节点', {
|
|
@@ -385,6 +545,23 @@ export default {
|
|
|
console.log(datas, '参数')
|
|
|
})
|
|
|
}
|
|
|
+ //删除父节点(tree一级@章节)
|
|
|
+ function deleteChapter(standard, chapterId, node) {
|
|
|
+ let user = JSON.parse(localStorage.getItem('userData'))
|
|
|
+ let data = { standard: standard, id: chapterId, tmdId: user.tmdId, tmdName: user.tmdName }
|
|
|
+ proxy.$api.removeChildnodes(data).then((res) => {
|
|
|
+ console.log(res, '删除父节点的返回')
|
|
|
+ if (res.state === 200) {
|
|
|
+ ElMessage.success('节点删除成功')
|
|
|
+ const parent = node.parent
|
|
|
+ const children = parent.data.children || parent.data
|
|
|
+ const index = children.findIndex((d) => d.id === data.id)
|
|
|
+ children.splice(index, 1)
|
|
|
+ } else {
|
|
|
+ ElMessage.error('节点删除失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
//处理HOST返回截取
|
|
|
function getBlobHost(url) {
|
|
|
let s = url || store.state.user.userProfile.blob_uri || store.state.user.studentProfile.blob_uri
|
|
@@ -403,8 +580,12 @@ export default {
|
|
|
props,
|
|
|
(nweProps) => {
|
|
|
nextTick(() => {
|
|
|
- treeRef.value.setCurrentKey(nweProps.defaultinfo)
|
|
|
- curNode.value = nweProps.tree[0].rnodes
|
|
|
+ console.log(fileList.value.id, '触发了监听')
|
|
|
+ if (!fileList.value.id) {
|
|
|
+ treeRef.value.setCurrentKey(nweProps.defaultinfo)
|
|
|
+ fileList.value.id = nweProps.defaultinfo
|
|
|
+ curNode.value = nweProps.tree[0].rnodes
|
|
|
+ }
|
|
|
})
|
|
|
},
|
|
|
{ immediate: true, deep: true }
|
|
@@ -435,6 +616,13 @@ export default {
|
|
|
fileList,
|
|
|
confirmUpload,
|
|
|
addFirstnode,
|
|
|
+ uploadFileData,
|
|
|
+ uploadBtn,
|
|
|
+ uploadList,
|
|
|
+ nowPitchCb,
|
|
|
+ changes,
|
|
|
+ deleteResource,
|
|
|
+ deleteChapter,
|
|
|
}
|
|
|
},
|
|
|
}
|
|
@@ -525,7 +713,7 @@ export default {
|
|
|
z-index: 999;
|
|
|
line-height: 55px;
|
|
|
text-align: center;
|
|
|
- margin-left: 20%;
|
|
|
+ margin-left: 5%;
|
|
|
border: 1px dashed #ccc;
|
|
|
border-radius: 5px;
|
|
|
padding: 5px;
|
|
@@ -665,4 +853,13 @@ export default {
|
|
|
.addzy:hover {
|
|
|
cursor: pointer;
|
|
|
}
|
|
|
+.changebtn {
|
|
|
+ width: 100px;
|
|
|
+ height: 40px;
|
|
|
+ line-height: 40px;
|
|
|
+}
|
|
|
+.changebtn button {
|
|
|
+ width: 100%;
|
|
|
+ height: 40px;
|
|
|
+}
|
|
|
</style>
|