OPEN_CURSOR and v$open_cursor <f…

Oracle游标监控
本文介绍如何在Oracle数据库中监控打开的游标数量,包括通过v$open_cursor视图查询不同类型的游标,并提供针对不同Oracle版本的具体SQL语句。
OPEN_CURSOR


To process a SQL statement, you must have an open cursor. When you call the OPEN_CURSOR Function function, you receive a cursor ID number for the data structure representing a valid cursor maintained by Oracle. These cursors are distinct from cursors defined at the precompiler, OCI, or PL/SQL level, and are used only by the DBMS_SQL package.



v$open_cursor

包括多种cursor:


注意 11.2中 v$open_cursor 才有 cursor_type 这一字段 之前都没有 , 即无法分清楚 是open cursor 还是cached cursor

SQL> select distinct cursor_type from v$open_cursor;

CURSOR_TYPE
----------------------------------------------------------------
SESSION CURSOR CACHED
OPEN
OPEN-RECURSIVE
DICTIONARY LOOKUP CURSOR CACHED
BUNDLE DICTIONARY LOOKUP CACHED

SESSION CURSOR CACHED
PL/SQL CURSOR CACHED

其中 部分是 CACHED的cursor 所以不能算作open cursor


可以利用以下查询近似 了解系统中 open cursor的总数,

SQL> select count(*)
2 from v$open_cursor where cursor_type in ('OPEN','OPEN-RECURSIVE');

COUNT(*)
----------
37


or


11g 以前 使用以下查询
select sum(a.value), b.name
from v$sesstat a, v$statname b
where a.statistic# = b.statistic#
and b.name = 'opened cursors current'
group by b.name;

SUM(A.VALUE) NAME
------------ ----------------------------------------------------------------
35 opened cursors current



对open cursor的监控

WITH a AS (SELECT VALUE init_open_cursors
FROM v$parameter
WHERE name = 'open_cursors'),
b AS (SELECT MAX (max_cursors) curr_max_cursors
FROM ( SELECT MAX (a.VALUE) max_cursors
FROM v$sesstat a, v$statname b, v$session s
WHERE a.statistic# = b.statistic#
AND s.sid = a.sid
AND b.name = 'opened cursors current'
GROUP BY s.sid))
SELECT ROUND (b.curr_max_cursors / a.init_open_cursors * 100, 2) ratio
FROM a, b;



可以通过以下语句来了解系统中真正意义上的打开着的游标:

select sum(a.value), b.name

from v$sesstat a, v$statname b
where a.statistic# = b.statistic#
and b.name = 'opened cursors current' group by b.name;
<!-- * @Description: 海淀智慧物业app- --> <template> <div class="economicdevelopment-page overflow_div page-background scoll_box dashboard-page"> <titlepage v-if="pathStr !== '/'" :title="pathName" :query="query"></titlepage> <!-- <div class="top_box" @click.stop="checkboxGroupShowFn">--> <!-- <div class="right_icon">--> <!-- <van-icon name="arrow-down" v-if="!checkboxGroupShow" />--> <!-- <van-icon name="arrow-up" v-if="checkboxGroupShow" />--> <!-- </div>--> <!-- 下拉多选查询 --> <!-- <p v-for="(item,i) of checkboxGroup" :key="i" @click.stop="deleteCheckbox(item)">--> <!-- <span>{{ item.name }}</span>--> <!-- <van-icon name="close" style="transform: scale(1.2);" />--> <!-- </p>--> <!-- <div v-if="checkboxGroup.length===0" class="placeholder">请选择小区</div>--> <!-- </div>--> <!-- 0805 增加查询项--> <div class="userLoginSearch"> <a-row :gutter="10"> <a-col :span="12"> <a-select show-search v-model="pane.szjz" :filterOption="filterOption" style="width: 100%" @change="handleStreetChange" placeholder="街镇"> <a-select-option :value="item.id" v-for="(item, i) in streetColumns" :key="i" :lable="item.departName"> {{ item.departName }} </a-select-option> </a-select> </a-col> <a-col :span="12"> <a-select show-search v-model="pane.sqmc" :filterOption="filterOption" style="width: 100%" @change="handleSQChange" placeholder="社区"> <a-select-option :value="item.id" v-for="(item, i) in townColumns" :key="i" :lable="item.departName"> {{ item.departName }} </a-select-option> </a-select> </a-col> </a-row> <a-row :gutter="10" style="margin-top: 10px;"> <a-col :span="12"> <a-input v-model="pane.xmmc" placeholder="项目名称"> <a-icon slot="suffix" type="search" style="color:#3b77b3;" /> </a-input> </a-col> <a-col :span="12" style="margin-top: 2px;"> <div class="checkboxContainer"> <span>专业化物业</span> <a-checkbox v-model="sfwzyhwyValue" @change="changeZyhwy" /> </div> </a-col> </a-row> <!-- 新增搜索与重置按钮 --> <div class="search-reset-btns" style="margin-top: 15px; display: flex; justify-content: space-between;"> <van-button type="info" block @click="reLoadData">搜索</van-button> <van-button type="default" block @click="handleReset">重置</van-button> </div> </div> <div class="tabBox"> <!-- <van-tabs v-model:active="activeName" color="#1989fa" @change="changeTab">--> <!-- <van-tab title="所有项目" name="0">--> <a-spin :spinning="spinning"> <div class="itemBox" v-for="(item, i) in listData" :key="i" @click="showDetail(item.id)"> <div class="contentBox"> <div class="imgBox"> <template v-if="item.imgUrl"> <van-image :src="item.imgUrl" width="50px" height="50px" style="border-radius: 5px;"> <template v-slot:loading> <van-loading type="spinner" size="20" /> </template> <template v-slot:error>加载失败</template> </van-image> </template> <template v-else> <div style=" width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; background: #f0f0f0; color: #999; font-size: 12px; " > 暂无图片 </div> </template> </div> <div class="msgBox"> <p>{{ item.xmmc ? item.xmmc : '' }}</p> <p>物业服务企业:{{ item.wyfwqy ? item.wyfwqy : '暂无企业' }}</p> <p> 更新时间: {{ item.updateTime ? item.updateTime : '暂无更新时间' }} </p> </div> <!-- <van-icon class="iconBox" name="edit" /> --> </div> <div class="typeBox" v-if="item.fwxz && item.fwxz.length > 0" :class="[ item.fwxz == 1 || item.fwxz == 2 || item.fwxz == 3 || item.fwxz == 4 || item.fwxz == 5 ? 'personalType' : 'publicType' ]" > <span v-for="(item1, i1) in item.fwxz" :key="i1"> <span v-if="item1 == 1">  商品住宅   </span> <span v-if="item1 == 2">  商住两用   </span> <span v-if="item1 == 3">  共有产权   </span> <span v-if="item1 == 4">  保障性住房(经适房、公租房等) )  </span> <span v-if="item1 == 5">  直管公房   </span> <span v-if="item1 == 6">  军产房   </span> <span v-if="item1 == 7">  三供一业   </span> <span v-if="item1 == 8">  非经资产移交   </span> <span v-if="item1 == 9">  房改售房   </span> <span v-if="item1 == 10">  回迁安置房   </span> <span v-if="item1 == -99">  其他   </span> </span> </div> <!-- <div v-else></div> --> </div> <a-button class="moreBtn" @click="getprojectListMsg" :disabled="moreDisabled"> {{ moreText }} <van-icon name="arrow-down" /> </a-button> <!-- 增加一个空div 顶高度--> <div style="height: 100px;width:100%"></div> </a-spin> <!-- </van-tab>--> <!-- <van-tab title="小区列表" name="1">--> <!-- <div style="font-size: 14px">--> <!-- <div class="itemBox" v-for="(item, i) in tab2ListData" :key="i" @click="showDetail(item.id)">--> <!-- <div class="contentBox">--> <!-- <div class="imgBox">--> <!-- <!– <van-image src="" width="50px" height="50px">--> <!-- <template v-slot:loading>--> <!-- <van-loading type="spinner" size="20" />--> <!-- </template>--> <!-- </van-image> –>--> <!-- <template v-if="item.imgUrl">--> <!-- <van-image :src="item.imgUrl" width="50px" height="50px">--> <!-- <template v-slot:loading>--> <!-- <van-loading type="spinner" size="20" />--> <!-- </template>--> <!-- <template v-slot:error>加载失败</template>--> <!-- </van-image>--> <!-- </template>--> <!-- <template v-else>--> <!-- <div--> <!-- style="--> <!-- margin-top: 20px;--> <!-- width: 50px;--> <!-- height: 50px;--> <!-- display: flex;--> <!-- align-items: center;--> <!-- justify-content: center;--> <!-- background: #f0f0f0;--> <!-- color: #999;--> <!-- font-size: 12px;--> <!-- "--> <!-- >--> <!-- 暂无图片--> <!-- </div>--> <!-- </template>--> <!-- </div>--> <!-- <div class="msgBox">--> <!-- <p>{{ item.xmmc ? item.xmmc : '' }}</p>--> <!-- <p>物业服务企业:{{ item.wyfwqy ? item.wyfwqy : '暂无企业' }}</p>--> <!-- <p>--> <!-- 更新时间:--> <!-- {{ item.updateTime ? item.updateTime : '暂无更新时间' }}--> <!-- </p>--> <!-- </div>--> <!-- <!– <van-icon class="iconBox" name="edit" /> –>--> <!-- </div>--> <!-- <div--> <!-- class="typeBox"--> <!-- v-if="item.fwxz"--> <!-- :class="[--> <!-- item.fwxz == 1 || item.fwxz == 2 || item.fwxz == 3 || item.fwxz == 4 || item.fwxz == 5--> <!-- ? 'personalType'--> <!-- : 'publicType'--> <!-- ]"--> <!-- >--> <!-- <span v-for="(item1, i1) in item.fwxz" :key="i1">--> <!-- <span v-if="item1 == 1">  商品住宅   </span>--> <!-- <span v-if="item1 == 2">  商住两用   </span>--> <!-- <span v-if="item1 == 3">  共有产权   </span>--> <!-- <span v-if="item1 == 4">  保障性住房(经适房、公租房等) )  </span>--> <!-- <span v-if="item1 == 5">  直管公房   </span>--> <!-- <span v-if="item1 == 6">  军产房   </span>--> <!-- <span v-if="item1 == 7">  三供一业   </span>--> <!-- <span v-if="item1 == 8">  非经资产移交   </span>--> <!-- <span v-if="item1 == 9">  房改售房   </span>--> <!-- <span v-if="item1 == 10">  回迁安置房   </span>--> <!-- <span v-if="item1 == -99">  其他   </span>--> <!-- </span>--> <!-- </div>--> <!-- <div v-else></div>--> <!-- </div>--> <!-- <a-button class="moreBtn" @click="getTab2List" :disabled="moreDisabled">--> <!-- {{ moreText }}--> <!-- <van-icon name="arrow-down" />--> <!-- </a-button>--> <!-- </div>--> <!-- </van-tab>--> <!-- </van-tabs>--> </div> <!-- <div class="container">--> <!-- <div v-for="(item,i) of notifyList" class="project_list_item">--> <!-- </div>--> <!-- </div>--> <!-- <div class="fixedBox"> 专题 <br />图层 </div> --> <!-- 顶部小区查询项弹框 --> <!-- <van-popup--> <!-- v-model="checkboxGroupShow"--> <!-- position="bottom"--> <!-- :style="{ height: '50%',zIndex:9999 }">--> <!-- <div class="my_checkbox_popup">--> <!-- <p class="cancel" @click="cancel(true)">取消</p>--> <!-- <p class="confirm" @click="comfirm">确认</p>--> <!-- </div>--> <!-- <van-checkbox-group v-model="checkboxGroupIds">--> <!-- <van-cell-group>--> <!-- <van-cell--> <!-- class="my_checkbox_popup_cell"--> <!-- v-for="(items, index) in dataOption"--> <!-- clickable--> <!-- :key="index"--> <!-- :title="items.name"--> <!-- @click="onSelect(items,index)">--> <!-- <template #right-icon>--> <!-- <van-checkbox :name="items.id" ref="CoverableCities" class="my_checkbox_popup_item" />--> <!-- </template>--> <!-- </van-cell>--> <!-- </van-cell-group>--> <!-- </van-checkbox-group>--> <!-- </van-popup>--> </div> </template> <script> import rolemixins from '@/utils/rolemixins'; import { managerListMsg, xioaquList } from '@/api/comm'; import { getSendRangeData } from '@/api/home'; import { getSqmcData } from '@/api/userState'; export default { name: 'projectList', components: {}, mixins: [rolemixins], data() { return { listData: [], tab2ListData: [], activeName: 'tab1', pathStr: this.$route.path, pathName: this.$route.meta.title ? this.$route.meta.title : '', query: {}, //分页 pane: { pageNo: 1, total: 0, pageSize: 10 }, sfwzyhwyValue: false, moreDisabled: false, moreText: '加载更多', streetColumns: [], townColumns: [], spinning: false, timer: null }; }, created() { }, activated() { }, beforeDestroy() { if (this.timer) { clearTimeout(this.timer); } }, mounted() { // this.initCheckboxGroup(); // this.getData(); this.getprojectListMsg(); this.getStreetData(); }, methods: { // 切换tab changeTab(tab) { this.activeName = tab; // this.getTab2List(); console.log('ffffff', tab); this.pane.pageNo = 1; this.moreDisabled = false; this.moreText = '加载更多'; this.pane.total = 0; this.listData = []; this.tab2ListData = []; if (tab == '0') { this.getprojectListMsg(); } else { this.getTab2List(); } }, // 获取数据列表接口 getData() { let params = { id: 1 }; }, // 获取所有项目 async getprojectListMsg() { this.spinning = true; const res = await managerListMsg(this.pane); if (res.success) { this.pane.total = res.result.total; this.listData = [...this.listData, ...res.result.records]; this.listData.forEach((item) => { if (item.fwxz && !Array.isArray(item.fwxz)) { item.fwxz = item.fwxz.split(','); } else { item.fwxz = item.fwxz || []; } }); this.$forceUpdate(); if (this.listData.length >= this.pane.total) { this.moreDisabled = true; this.moreText = '没有更多了'; } else { this.moreDisabled = false; this.moreText = '加载更多'; } } this.spinning = false; }, // 获取小区列表 getTab2List() { xioaquList(this.pane).then((res) => { this.pane.total = res.result.total; this.pane.pageNo = this.pane.pageNo + 1; if (res.code == 200) { if (res.result.records.length < this.pane.pageSize) { this.moreDisabled = true; this.moreText = '没有更多了'; this.tab2ListData = [...this.tab2ListData, ...res.result.records]; this.$forceUpdate(); } else { this.moreDisabled = false; this.moreText = '加载更多'; this.tab2ListData = [...this.tab2ListData, ...res.result.records]; this.$forceUpdate(); } } }); }, // 跳转项目信息详情 filterOption(inputValue, option) { return option.data.attrs.lable ? option.data.attrs.lable.includes(inputValue) : null; }, // 获取街镇数据以及社区数据 getStreetData() { getSendRangeData().then((res) => { this.streetColumns = res.result; }); }, // 获取社区数据 getTownData(val) { getSqmcData({ id: val }).then((res) => { this.townColumns = res.result; }); }, handleTownConfirm(val) { this.sqmcName = val.departName; this.pane.sqmc = val.id; this.townPicker = false; }, handleSearch() { console.log(this.pane); this.pane.pageNo = 1; this.moreDisabled = false; this.moreText = '加载更多'; this.listData = []; this.getprojectListMsg(); }, handleReset() { this.pane = { xmmc: '', szjz: undefined, sqmc: undefined, pageNo: 1, pageSize: 10, total: 0 }; this.moreDisabled = false; this.townColumns = []; this.moreDisabled = false this.moreText = '加载更多'; this.listData = []; this.$nextTick(() => { this.$forceUpdate }) this.getprojectListMsg(); }, showDetail(id) { this.$router.push({ path: '/listDetail', query: { id: id } }); }, changeZyhwy(e) { this.pane.sfwzyhwy = this.sfwzyhwyValue ? 1 : 0; this.reLoadData(); }, handleStreetChange(val) { // 清空社区 this.pane.sqmc = undefined; this.getTownData(val); // this.reLoadData(); }, handleSQChange(val) { this.pane.sqmc = val; // this.reLoadData(); }, reLoadData() { this.pane.pageNo = 1; this.moreDisabled = false; this.moreText = '加载更多'; this.listData = []; this.getprojectListMsg(); }, // changeXmmc(e) { // if (this.timer) { // clearTimeout(this.timer); // } // this.timer = setTimeout(() => { // this.moreDisabled = false; // this.moreText = '加载更多'; // this.listData = []; // // this.getprojectListMsg(); // }, 1000); // } // checkboxGroupShowFn() { // this.checkboxGroupShow = true; // } // initCheckboxGroup() { // this.checkboxGroupIds = []; // this.checkboxGroup = []; // }, // onSelect(items, index) { // this.$refs.CoverableCities[index].toggle(); // }, // comfirm() { // let text = []; // this.dataOption.map((its, i) => { // if (this.checkboxGroupIds.indexOf(its.id) !== -1) { // text.push(its); // } // }); // this.checkboxGroup = text; // this.$forceUpdate(); // this.cancel(false); // }, // cancel(flag) { // this.$forceUpdate(); // this.checkboxGroupShow = false; // if (flag) { // this.initCheckboxGroup(); // } // }, // deleteCheckbox(item) { // this.checkboxGroup.map((its, index) => { // if (item.id === its.id) { // this.checkboxGroup.splice(index, 1); // } // }); // this.checkboxGroupIds = this.checkboxGroup.map(its => { // return its.id; // }); // console.log(this.checkboxGroup, this.checkboxGroupIds, '----deleteCheckbox'); // } } }; </script> <style scoped lang="less"> @import '~@/assets/css/comm.less'; .economicdevelopment-page { height: 100%; .fixedBox { width: 80px; height: 80px; border-radius: 50%; box-shadow: 5px 5px 5px #ccc, -5px -5px 5px #ccc, 5px -5px 5px #ccc, -5px 5px 5px #ccc; position: absolute; bottom: 20px; right: 20px; background: #fff; font-size: 14px; text-align: center; display: flex; align-items: center; justify-content: center; } .top_box { width: auto; height: 40px; background: #fff; border: 1px solid #3b77b3; position: relative; display: flex; align-items: center; padding: 0 5px; margin: 0 10px; .right_icon { position: absolute; top: 5px; right: 10px; } p { padding: 5px 10px 20px 10px; height: 24px; background: rgba(59, 119, 179, 0.15); border-radius: 12px; border: 1px solid rgba(59, 119, 179, 0.5); color: #3b77b3; font-size: 12px; font-weight: 500; font-family: PingFangSC, PingFang SC; margin: 0 2px; span { display: inline-block; margin-right: 10px; } } div.placeholder { width: 100%; color: #d4d3d3; font-size: 16px; font-weight: normal; text-align: center; } } /deep/ .van-tabs__content { overflow-y: scroll; } .tabBox { width: auto; margin: 0 10px; margin-top: 5px; height: 88vh; overflow: hidden; overflow-y: scroll; .itemBox { width: 100%; //height: 80px; position: relative; font-size: 12px; padding: 10px; background: #fff; margin-bottom: 10px; display: flex; align-items: flex-end; margin-top: 5px; .contentBox { display: flex; justify-content: space-between; text-align: center; width: 100%; .iconBox { font-size: 26px; width: auto; height: 30px; line-height: 60px; } .msgBox { text-align: left; width: 200px; } .imgBox { width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; } } .typeBox { position: absolute; height: 20px; line-height: 20px; top: 0; right: 10px; text-align: center; padding: 0 5px; max-width: 50%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .personalType { background: #e99d42; } .publicType { background: #a2ef4d; } } } //.container { // height: 100% !important; // padding: 0 12.5px; // //} } .my_checkbox_popup { width: 100%; height: 45px; line-height: 45px; margin-bottom: 5px; display: flex; justify-content: space-between; align-items: center; p { height: 100%; padding: 0 0.42667rem; font-size: 0.37333rem; background-color: transparent; border: none; cursor: pointer; } p.cancel { color: #969799; } p.confirm { color: #576b95; } } .my_checkbox_popup_cell { /deep/ .van-cell__title { padding: 8px 10px; } } .my_checkbox_popup_item { padding: 10px 15px; } .moreBtn { text-align: center; color: #1989fa; border: none; width: 100%; background: #fff; } .userLoginSearch { background-color: #fff; border-radius: 10px; padding: 10px; margin: 10px 0; .checkboxContainer { width: 100%; border-radius: 10px; border: 1px solid #3b77b3; font-size: 14px; padding: 0 8px; height: 32px; line-height: 32px; display: flex; align-items: center; justify-content: space-between; color: #3b77b3; } } .search-reset-btns { // background-color: #3c78b1; display: flex; gap: 10px; .van-button { background-color: #3c78b1; flex: 1; font-size: 14px; color: #ffffff; } } ::v-deep .ant-select-selection { border-color: #3b77b3; border-radius: 10px; color: #3b77b3; .ant-select-selection__placeholder { color: #3b77b3; } } ::v-deep .ant-input { border-color: #3b77b3; border-radius: 10px; padding-left: 8px; color: #3b77b3; &::placeholder { color: #3b77b3; } } </style> <template v-if="item.imgUrl"> <van-image :src="item.imgUrl" width="50px" height="50px" style="border-radius: 5px;"> <template v-slot:loading> <van-loading type="spinner" size="20" /> </template> <template v-slot:error>加载失败</template> </van-image> </template> <template v-else> <div style=" width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; background: #f0f0f0; color: #999; font-size: 12px; " > 暂无图片 </div> </template>这段代码现在是图片,换成视频,点击视频后可弹出并播放
08-08
<!-- * @Description: 海淀智慧物业app- --> <template> <div class="economicdevelopment-page overflow_div page-background scoll_box dashboard-page"> <titlepage v-if="pathStr !== '/'" :title="pathName" :query="query"></titlepage> <!-- <div class="top_box" @click.stop="checkboxGroupShowFn">--> <!-- <div class="right_icon">--> <!-- <van-icon name="arrow-down" v-if="!checkboxGroupShow" />--> <!-- <van-icon name="arrow-up" v-if="checkboxGroupShow" />--> <!-- </div>--> <!-- 下拉多选查询 --> <!-- <p v-for="(item,i) of checkboxGroup" :key="i" @click.stop="deleteCheckbox(item)">--> <!-- <span>{{ item.name }}</span>--> <!-- <van-icon name="close" style="transform: scale(1.2);" />--> <!-- </p>--> <!-- <div v-if="checkboxGroup.length===0" class="placeholder">请选择小区</div>--> <!-- </div>--> <!-- 0805 增加查询项--> <div class="userLoginSearch"> <a-row :gutter="10"> <a-col :span="12"> <a-select show-search v-model="pane.szjz" :filterOption="filterOption" style="width: 100%" @change="handleStreetChange" placeholder="街镇" > <a-select-option :value="item.id" v-for="(item, i) in streetColumns" :key="i" :lable="item.departName"> {{ item.departName }} </a-select-option> </a-select> </a-col> <a-col :span="12"> <a-select show-search v-model="pane.sqmc" :filterOption="filterOption" style="width: 100%" @change="handleSQChange" placeholder="社区" > <a-select-option :value="item.id" v-for="(item, i) in townColumns" :key="i" :lable="item.departName"> {{ item.departName }} </a-select-option> </a-select> </a-col> </a-row> <a-row :gutter="10"> <a-col :span="12"> <a-input v-model="pane.xmmc" placeholder="项目名称" @input="handleXmmcInput"> <a-icon slot="suffix" type="search" style="color: #3b77b3" /> </a-input> </a-col> <a-col :span="12" style="margin-top: 15px"> <div class="checkboxContainer"> <span>专业化物业</span> <a-checkbox v-model="sfwzyhwyValue" @change="changeZyhwy" /> </div> </a-col> </a-row> <!-- 新增搜索与重置按钮 --> <div class="search-reset-btns"> <van-button type="default" color="#3B77B3" block @click="reLoadData">搜索<van-icon style="margin-left: 10px;" name="search" /></van-button> <van-button type="default" block @click="handleReset" style="background: #f1f3f3; border-radius: 14px; border: 2px solid #3b77b380; color: #3b77b3;">重置<van-icon style="margin-left: 10px;" name="replay" /></van-button> </div> </div> <div class="tabBox"> <!-- <van-tabs v-model:active="activeName" color="#1989fa" @change="changeTab">--> <!-- <van-tab title="所有项目" name="0">--> <a-spin :spinning="spinning"> <div class="itemBox" v-for="(item, i) in listData" :key="i" @click="showDetail(item.id)"> <div class="contentBox"> <template> <div class="economicdevelopment-page overflow_div page-background scoll_box dashboard-page" style="width: 64px; height: 64px" > <!-- 其他页面内容 --> <div class="contentBox"> <!-- 左侧视频封面图,点击播放 --> <div @click.stop="openImage(item)" class="videoThumbnail"> <img v-if="item.sqImg" :src="item.sqImg.split(',')[0]" alt="" style="background-color: white" /> <img v-else src="@/assets/img/suolueErrorImg.png" alt="" style="background-color: white" /> <!-- <van-image :src="item.sqVideo" width="50px" height="50px" style="border-radius: 5px" > <template v-slot:loading> <van-loading type="spinner" size="20" /> </template> <template v-slot:error >加载失败</template> </van-image> --> </div> <!-- 项目信息 --> <div class="msgBox"> <p>{{ item.xmmc ? item.xmmc : '' }}</p> <p>物业服务企业:{{ item.wyfwqy ? item.wyfwqy : '暂无企业' }}</p> <p>更新时间: {{ item.updateTime ? item.updateTime : '暂无更新时间' }}</p> </div> </div> <!-- 其他页面内容 --> </div> </template> <!-- <div class="imgBox"> <template v-if="item.imgUrl"> <van-image :src="item.imgUrl" width="50px" height="50px" style="border-radius: 5px;"> <template v-slot:loading> <van-loading type="spinner" size="20" /> </template> <template v-slot:error>加载失败</template> </van-image> </template> <template v-else> <div style=" width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; background: #f0f0f0; color: #999; font-size: 12px; " > 暂无图片 </div> </template> </div> --> <div class="msgBox"> <p>{{ item.xmmc ? item.xmmc : '' }}</p> <p>物业服务企业:{{ item.wyfwqy ? item.wyfwqy : '暂无企业' }}</p> <p> 更新时间: {{ item.updateTime ? item.updateTime : '暂无更新时间' }} </p> </div> <!-- <van-icon class="iconBox" name="edit" /> --> </div> <div class="typeBox" v-if="item.fwxz && item.fwxz.length > 0" :class="[ item.fwxz == 1 || item.fwxz == 2 || item.fwxz == 3 || item.fwxz == 4 || item.fwxz == 5 ? 'personalType' : 'publicType' ]" > <span v-for="(item1, i1) in item.fwxz" :key="i1"> <span v-if="item1 == 1">  商品住宅   </span> <span v-if="item1 == 2">  商住两用   </span> <span v-if="item1 == 3">  共有产权   </span> <span v-if="item1 == 4">  保障性住房(经适房、公租房等) )  </span> <span v-if="item1 == 5">  直管公房   </span> <span v-if="item1 == 6">  军产房   </span> <span v-if="item1 == 7">  三供一业   </span> <span v-if="item1 == 8">  非经资产移交   </span> <span v-if="item1 == 9">  房改售房   </span> <span v-if="item1 == 10">  回迁安置房   </span> <span v-if="item1 == -99">  其他   </span> </span> </div> <!-- <div v-else></div> --> </div> <a-button class="moreBtn" @click="getprojectListMsg" :disabled="moreDisabled"> {{ moreText }} <van-icon name="arrow-down" /> </a-button> <!-- 增加一个空div 顶高度--> <div style="height: 100px; width: 100%"></div> </a-spin> <!-- </van-tab>--> <!-- <van-tab title="小区列表" name="1">--> <!-- <div style="font-size: 14px">--> <!-- <div class="itemBox" v-for="(item, i) in tab2ListData" :key="i" @click="showDetail(item.id)">--> <!-- <div class="contentBox">--> <!-- <div class="imgBox">--> <!-- <!– <van-image src="" width="50px" height="50px">--> <!-- <template v-slot:loading>--> <!-- <van-loading type="spinner" size="20" />--> <!-- </template>--> <!-- </van-image> –>--> <!-- <template v-if="item.imgUrl">--> <!-- <van-image :src="item.imgUrl" width="50px" height="50px">--> <!-- <template v-slot:loading>--> <!-- <van-loading type="spinner" size="20" />--> <!-- </template>--> <!-- <template v-slot:error>加载失败</template>--> <!-- </van-image>--> <!-- </template>--> <!-- <template v-else>--> <!-- <div--> <!-- style="--> <!-- margin-top: 20px;--> <!-- width: 50px;--> <!-- height: 50px;--> <!-- display: flex;--> <!-- align-items: center;--> <!-- justify-content: center;--> <!-- background: #f0f0f0;--> <!-- color: #999;--> <!-- font-size: 12px;--> <!-- "--> <!-- >--> <!-- 暂无图片--> <!-- </div>--> <!-- </template>--> <!-- </div>--> <!-- <div class="msgBox">--> <!-- <p>{{ item.xmmc ? item.xmmc : '' }}</p>--> <!-- <p>物业服务企业:{{ item.wyfwqy ? item.wyfwqy : '暂无企业' }}</p>--> <!-- <p>--> <!-- 更新时间:--> <!-- {{ item.updateTime ? item.updateTime : '暂无更新时间' }}--> <!-- </p>--> <!-- </div>--> <!-- <!– <van-icon class="iconBox" name="edit" /> –>--> <!-- </div>--> <!-- <div--> <!-- class="typeBox"--> <!-- v-if="item.fwxz"--> <!-- :class="[--> <!-- item.fwxz == 1 || item.fwxz == 2 || item.fwxz == 3 || item.fwxz == 4 || item.fwxz == 5--> <!-- ? 'personalType'--> <!-- : 'publicType'--> <!-- ]"--> <!-- >--> <!-- <span v-for="(item1, i1) in item.fwxz" :key="i1">--> <!-- <span v-if="item1 == 1">  商品住宅   </span>--> <!-- <span v-if="item1 == 2">  商住两用   </span>--> <!-- <span v-if="item1 == 3">  共有产权   </span>--> <!-- <span v-if="item1 == 4">  保障性住房(经适房、公租房等) )  </span>--> <!-- <span v-if="item1 == 5">  直管公房   </span>--> <!-- <span v-if="item1 == 6">  军产房   </span>--> <!-- <span v-if="item1 == 7">  三供一业   </span>--> <!-- <span v-if="item1 == 8">  非经资产移交   </span>--> <!-- <span v-if="item1 == 9">  房改售房   </span>--> <!-- <span v-if="item1 == 10">  回迁安置房   </span>--> <!-- <span v-if="item1 == -99">  其他   </span>--> <!-- </span>--> <!-- </div>--> <!-- <div v-else></div>--> <!-- </div>--> <!-- <a-button class="moreBtn" @click="getTab2List" :disabled="moreDisabled">--> <!-- {{ moreText }}--> <!-- <van-icon name="arrow-down" />--> <!-- </a-button>--> <!-- </div>--> <!-- </van-tab>--> <!-- </van-tabs>--> </div> <!-- 视频弹窗 --> <!-- <van-popup v-model:show="showVideoPopup" position="center" :style="{ width: '90%', maxHeight: '80%',backGround:'transparent' }" :closeable="true" @close.stop="closeVideo" > <div class="video-popup-content"> <video :src="currentVideoUrl" controls autoplay style="width: 100%; height: 100%; border-radius: 10px"></video> </div> </van-popup> --> <van-popup v-model:show="showImagePopup" position="center" :style="{ width: '90%', height: '80%' }" :closeable="true" @close="closeImage" > <div class="image-popup-content"> <img :src="currentImageUrls[currentIndex]" alt="查看大图" style="width: 100%; height: auto;" /> <div class="nav-buttons"> <van-button v-if="currentIndex > 0" @click="prevImage">上一张</van-button> <van-button v-if="currentIndex < currentImageUrls.length - 1" @click="nextImage">下一张</van-button> </div> </div> </van-popup> <!-- <div class="container">--> <!-- <div v-for="(item,i) of notifyList" class="project_list_item">--> <!-- </div>--> <!-- </div>--> <!-- <div class="fixedBox"> 专题 <br />图层 </div> --> <!-- 顶部小区查询项弹框 --> <!-- <van-popup--> <!-- v-model="checkboxGroupShow"--> <!-- position="bottom"--> <!-- :style="{ height: '50%',zIndex:9999 }">--> <!-- <div class="my_checkbox_popup">--> <!-- <p class="cancel" @click="cancel(true)">取消</p>--> <!-- <p class="confirm" @click="comfirm">确认</p>--> <!-- </div>--> <!-- <van-checkbox-group v-model="checkboxGroupIds">--> <!-- <van-cell-group>--> <!-- <van-cell--> <!-- class="my_checkbox_popup_cell"--> <!-- v-for="(items, index) in dataOption"--> <!-- clickable--> <!-- :key="index"--> <!-- :title="items.name"--> <!-- @click="onSelect(items,index)">--> <!-- <template #right-icon>--> <!-- <van-checkbox :name="items.id" ref="CoverableCities" class="my_checkbox_popup_item" />--> <!-- </template>--> <!-- </van-cell>--> <!-- </van-cell-group>--> <!-- </van-checkbox-group>--> <!-- </van-popup>--> </div> </template> <script> import rolemixins from '@/utils/rolemixins'; import { managerListMsg, xioaquList, xioaquVideoList } from '@/api/comm'; import { getSendRangeData } from '@/api/home'; import { getSqmcData } from '@/api/userState'; export default { name: 'projectList', components: {}, mixins: [rolemixins], data() { return { showVideoPopup: false, currentVideoUrl: null, showImagePopup: false, currentImageUrls: [], currentIndex: 0, listData: [], // 假设 listData 会从接口获取 // currentVideoUrl: 'https://www.w3schools.com/html/mov_bbb.mp4', // 一个测试视频地址 // listData: [ // { // id: 1, // xmmc: '项目A', // imgUrl: 'https://via.placeholder.com/50x50?text=Video+1', // hasVideo: true // 假设这个项目有视频 // }, // { // id: 2, // xmmc: '项目B', // imgUrl: '', // hasVideo: false // 假设这个项目没有视频 // }, // { // id: 3, // xmmc: '项目C', // imgUrl: 'https://via.placeholder.com/50x50?text=Video+2', // hasVideo: true // } // ], tab2ListData: [], activeName: 'tab1', pathStr: this.$route.path, pathName: this.$route.meta.title ? this.$route.meta.title : '', query: {}, //分页 pane: { pageNo: 1, total: 0, pageSize: 10, xmmc: '', // 项目名称 szjz: undefined, // 街镇 sqmc: undefined, // 社区 sfwzyhwy: 1 // 新增字段,1 表示专业化物业选中 }, sfwzyhwyValue: true, moreDisabled: false, moreText: '加载更多', streetColumns: [], townColumns: [], spinning: false, timer: null, }; }, created() {}, activated() {}, beforeDestroy() { if (this.timer) { clearTimeout(this.timer); } }, mounted() { // this.initCheckboxGroup(); // this.getData(); this.getprojectListMsg(); // 获取项目列表 this.getStreetData(); // 假装调用接口成功,使用假数据填充 listData // this.listData = [ // { // id: 1, // xmmc: '项目A', // imgUrl: 'https://via.placeholder.com/50x50?text=Video+1', // hasVideo: true // }, // { // id: 2, // xmmc: '项目B', // imgUrl: '', // hasVideo: false // }, // { // id: 3, // xmmc: '项目C', // imgUrl: 'https://via.placeholder.com/50x50?text=Video+2', // hasVideo: true // } // ]; }, methods: { // 获取单个项目的视频地址 async fetchVideoUrl(item) { try { const res = await xioaquVideoList({ id: item.id }); console.error('1111111==============>', { id: '1839890114125811716' }); // const res = await managerListMsg({ id: '1839890114125811716' }); console.log('接口返回:', res); // 打印调试 const data = res.data || {}; if (data.sqVideo && data.sqVideo.trim()) { item.videoUrl = data.sqVideo; } else { this.$toast('该条目无视频'); } } catch (error) { console.error('获取视频失败:', error); item.videoUrl = null; this.$toast('获取视频失败'); } }, // openVideo(item) { // if (item.sqVideo) { // this.currentVideoUrl = item.sqVideo; // this.showVideoPopup = true; // } else { // this.$toast('暂无视频'); // } // }, openImage(item) { if (item.sqImg) { this.currentImageUrls = item.sqImg.split(',').map(url => url.trim()).filter(url => url); this.currentIndex = 0; this.showImagePopup = true; } else { this.$toast('暂无图片'); } }, closeImage() { this.showImagePopup = false; this.currentImageUrls = []; this.currentIndex = 0; }, prevImage() { if (this.currentIndex > 0) { this.currentIndex--; } }, nextImage() { if (this.currentIndex < this.currentImageUrls.length - 1) { this.currentIndex++; } }, closeVideo() { this.currentVideoUrl = null; }, // 切换tab changeTab(tab) { this.activeName = tab; // this.getTab2List(); console.log('ffffff', tab); this.pane.pageNo = 1; this.moreDisabled = false; this.moreText = '加载更多'; this.pane.total = 0; this.listData = []; this.tab2ListData = []; if (tab == '0') { this.getprojectListMsg(); } else { this.getTab2List(); } }, // 获取数据列表接口 getData() { let params = { id: 1 }; }, // 获取所有项目 async getprojectListMsg() { this.spinning = true; const res = await managerListMsg(this.pane); if (res.success) { this.pane.total = res.result.total; this.listData = [...this.listData, ...res.result.records]; this.listData.forEach((item) => { if (item.fwxz && !Array.isArray(item.fwxz)) { item.fwxz = item.fwxz.split(','); } else { item.fwxz = item.fwxz || []; } }); this.$forceUpdate(); if (this.listData.length >= this.pane.total) { this.moreDisabled = true; this.moreText = '没有更多了'; } else { this.moreDisabled = false; this.moreText = '加载更多'; } this.pane.pageNo += 1; } this.spinning = false; }, // 获取小区列表 getTab2List() { xioaquList(this.pane).then((res) => { this.pane.total = res.result.total; this.pane.pageNo = this.pane.pageNo + 1; if (res.code == 200) { if (res.result.records.length < this.pane.pageSize) { this.moreDisabled = true; this.moreText = '没有更多了'; this.tab2ListData = [...this.tab2ListData, ...res.result.records]; this.$forceUpdate(); } else { this.moreDisabled = false; this.moreText = '加载更多'; this.tab2ListData = [...this.tab2ListData, ...res.result.records]; this.$forceUpdate(); } } }); }, // 跳转项目信息详情 filterOption(inputValue, option) { return option.data.attrs.lable ? option.data.attrs.lable.includes(inputValue) : null; }, handleXmmcInput(value) { // 延迟请求,避免频繁输入导致频繁搜索 if (this.searchTimer) { clearTimeout(this.searchTimer); } this.searchTimer = setTimeout(() => { this.pane.pageNo = 1; this.listData = []; this.getprojectListMsg(); // 重新加载数据 }, 500); }, // 获取街镇数据以及社区数据 getStreetData() { getSendRangeData().then((res) => { this.streetColumns = res.result; }); }, // 获取社区数据 getTownData(val) { getSqmcData({ id: val }).then((res) => { this.townColumns = res.result; }); }, handleTownConfirm(val) { this.sqmcName = val.departName; this.pane.sqmc = val.id; this.townPicker = false; }, handleSearch() { console.log(this.pane); this.pane.pageNo = 1; this.moreDisabled = false; this.moreText = '加载更多'; this.listData = []; this.getprojectListMsg(); }, handleReset() { this.pane = { xmmc: '', szjz: undefined, sqmc: undefined, pageNo: 1, pageSize: 10, total: 0 }; this.moreDisabled = false; this.townColumns = []; this.moreDisabled = false; this.moreText = '加载更多'; this.listData = []; this.$nextTick(() => { this.$forceUpdate; }); this.getprojectListMsg(); }, showDetail(id) { this.$router.push({ path: '/listDetail', query: { id: id } }); }, changeZyhwy(e) { this.pane.sfwzyhwy = this.sfwzyhwyValue ? 1 : 0; this.reLoadData(); }, handleStreetChange(val) { // 清空社区 this.pane.sqmc = undefined; this.getTownData(val); // this.reLoadData(); }, handleSQChange(val) { this.pane.sqmc = val; // this.reLoadData(); }, reLoadData() { this.pane.pageNo = 1; this.moreDisabled = false; this.moreText = '加载更多'; this.listData = []; this.getprojectListMsg(); } // changeXmmc(e) { // if (this.timer) { // clearTimeout(this.timer); // } // this.timer = setTimeout(() => { // this.moreDisabled = false; // this.moreText = '加载更多'; // this.listData = []; // // this.getprojectListMsg(); // }, 1000); // } // checkboxGroupShowFn() { // this.checkboxGroupShow = true; // } // initCheckboxGroup() { // this.checkboxGroupIds = []; // this.checkboxGroup = []; // }, // onSelect(items, index) { // this.$refs.CoverableCities[index].toggle(); // }, // comfirm() { // let text = []; // this.dataOption.map((its, i) => { // if (this.checkboxGroupIds.indexOf(its.id) !== -1) { // text.push(its); // } // }); // this.checkboxGroup = text; // this.$forceUpdate(); // this.cancel(false); // }, // cancel(flag) { // this.$forceUpdate(); // this.checkboxGroupShow = false; // if (flag) { // this.initCheckboxGroup(); // } // }, // deleteCheckbox(item) { // this.checkboxGroup.map((its, index) => { // if (item.id === its.id) { // this.checkboxGroup.splice(index, 1); // } // }); // this.checkboxGroupIds = this.checkboxGroup.map(its => { // return its.id; // }); // console.log(this.checkboxGroup, this.checkboxGroupIds, '----deleteCheckbox'); // } } }; </script> <style scoped lang="less"> @import '~@/assets/css/comm.less'; ::v-deep .van-popup{ background-color: transparent !important; } .videoError { width: 50px; height: 50px; } .economicdevelopment-page { height: 100%; .fixedBox { width: 80px; height: 80px; border-radius: 50%; box-shadow: 5px 5px 5px #ccc, -5px -5px 5px #ccc, 5px -5px 5px #ccc, -5px 5px 5px #ccc; position: absolute; bottom: 20px; right: 20px; background: #fff; font-size: 14px; text-align: center; display: flex; align-items: center; justify-content: center; } .top_box { width: auto; height: 40px; background: #fff; border: 1px solid #3b77b3; position: relative; display: flex; align-items: center; padding: 0 5px; margin: 0 10px; .right_icon { position: absolute; top: 5px; right: 10px; } p { padding: 5px 10px 20px 10px; height: 24px; background: rgba(59, 119, 179, 0.15); border-radius: 12px; border: 1px solid rgba(59, 119, 179, 0.5); color: #3b77b3; font-size: 12px; font-weight: 500; font-family: PingFangSC, PingFang SC; margin: 0 2px; span { display: inline-block; margin-right: 10px; } } div.placeholder { width: 100%; color: #d4d3d3; font-size: 16px; font-weight: normal; text-align: center; } } /deep/ .van-tabs__content { overflow-y: scroll; } .tabBox { width: auto; margin: 0 10px; margin-top: 5px; height: 65vh; overflow: hidden; overflow-y: scroll; .itemBox { width: 100%; //height: 80px; position: relative; font-size: 12px; padding: 20px 0px 15px 0px; background: #fff; margin-bottom: 10px; display: flex; align-items: flex-end; margin-top: 5px; .contentBox { display: flex; justify-content: space-around; text-align: center; width: 100%; .video-popup-content { // padding: 10px; background: #000; } .iconBox { font-size: 26px; width: auto; height: 30px; line-height: 60px; } .msgBox { text-align: left; width: 200px; } .imgBox { width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; } } .typeBox { border-top-right-radius: 15px; border-bottom-left-radius: 15px; position: absolute; height: 20px; line-height: 20px; top: 0; right: 10px; text-align: center; padding: 0 5px; max-width: 50%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .personalType { background: #e99d42; } .publicType { background: #a2ef4d; } } } //.container { // height: 100% !important; // padding: 0 12.5px; // //} } .my_checkbox_popup { width: 100%; height: 45px; line-height: 45px; margin-bottom: 5px; display: flex; justify-content: space-between; align-items: center; p { height: 100%; padding: 0 0.42667rem; font-size: 0.37333rem; background-color: transparent; border: none; cursor: pointer; } p.cancel { color: #969799; } p.confirm { color: #576b95; } } .my_checkbox_popup_cell { /deep/ .van-cell__title { padding: 8px 10px; } } .my_checkbox_popup_item { padding: 10px 15px; } .moreBtn { text-align: center; color: #1989fa; border: none; width: 100%; background: #f1f3f3; } .userLoginSearch { // background-color: #fff; border-radius: 10px; padding: 10px; margin: 10px 0; .checkboxContainer { background-color: #f1f3f3; width: 100%; border-radius: 10px; border: 1px solid #3b77b3; font-size: 14px; padding: 0 8px; height: 32px; line-height: 32px; display: flex; align-items: center; justify-content: space-between; color: #3b77b3; } } .search-reset-btns { width: 100%; margin-top: 15px; justify-content: space-between; // background-color: #3c78b1; display: flex; gap: 10px; .van-button { border-radius: 14px; height: 36.69px; // background-color: transparent; flex: 1; font-size: 14px; color: #f1f3f3; img{ width: 20px; height: 20px; margin-left: 11px; } } } ::v-deep .ant-select-selection { border-color: #3b77b3; border-radius: 10px; color: #3b77b3; .ant-select-selection__placeholder { color: #3b77b3; } } ::v-deep .ant-input { border-color: #3b77b3; border-radius: 10px; padding-left: 8px; color: #3b77b3; &::placeholder { color: #3b77b3; } } </style> 为啥前面的图片有是img图片,出现了一个p标签,里面有字体内容
08-21
<!DOCTYPE html> <html lang="zh-cn" style="font-size: 15px;"> <head> <meta charset="UTF-8"> <meta name=renderer content=webkit> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <meta http-equiv="Cache-Control" content="max-age=7200" /> <!-- <meta name="referrer" content="no-referrer"> --> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="LNB换型事件标准内容,IMES FA 相关文档,技术,架构,流程,知识,规范,标准化"/> <meta name="description" content="``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName" /> <!-- OGP分享协议开始 --> <meta property="og:type" content="website"> <meta property="og:title" content="LNB换型事件标准内容 - IMES FA 相关文档"> <meta property="og:description" content="``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName"> <meta property="og:url" content="http://kk.luxsan-ict.com/doc/13859/"> <link rel="icon" href="/static/search/mrdoc_logo_300.png" sizes="192x192" /> <meta property="og:image" content="http://kk.luxsan-ict.com/static/search/mrdoc_logo_300.png"> <!-- OGP分享协议结束 --> <title>LNB换型事件标准内容 - IMES FA 相关文档 - 立臻IT知识库 </title> <link href="/static/PearAdminLayui/component/layui/css/layui.css?version=1.5.2" rel="stylesheet"> <link rel="stylesheet" href="/static/mr-marked/marked.css?version=1.5.2" /> <link href="/static/viewerjs/viewer.min.css?version=1.5.2" rel="stylesheet"> <link href="/static/mrdoc/mrdoc.css?version=1.5.2" rel="stylesheet"> <link href="/static/mrdoc/mrdoc-docs.css?version=1.5.2" rel="stylesheet"> <link href="/static/iconFont/iconfont.css?version=1.5.2" rel="stylesheet"> <style> .markdown-code .markdown-code-block pre,.vditor-reset > pre > code.hljs{ max-height: max-content!important; } code[class*=language-], pre[class*=language-]{ white-space: pre-wrap !important; } :not(pre)>code[class*=language-]{ white-space: inherit !important; } /* html{ filter: invert(1) hue-rotate(180deg); } */ </style> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> <![endif]--> </head> <body class="big-page"> <div id="doc-container"> <!-- 左侧目录栏 --> <div id="doc-container-sidebar" id="doc-summary"> <div> <!-- 左上角广告块 --> <!-- 广告代码开始 --> <!-- 广告代码结束 --> <!-- 文集名称 --> <div class="project-title"> <svg class="icon" aria-hidden="true"><use xlink:href="#mrdoc-icon-pro-2"></use></svg> <a href="/project/129/" >IMES FA 相关文档 </a> <i class="layui-icon layui-icon-star" style="cursor: pointer;" title="请登录后收藏"></i> <p> </p> </div> <!-- 文档搜索框 --> <form action="/project/129/" method="get" class="project-search-div" > <div id="doc-search-input"> <input type="text" name="kw" placeholder="在文集内搜索文档" value="" class="layui-input doc-search-input"> <button type="submit" style="position: absolute;top:15px;right: 20px;border: none;background-color: white;cursor:pointer"> <i class="layui-icon layui-icon-search"></i> </button> </div> </form> <!-- <hr> --> <!-- 遍历文集大纲 --> <!-- 如果文集的文档数量超过999,使用异步加载文集目录 --> <!-- 文档数量小于999,使用同步加载文集目录 --> <nav> <ul class=""> <!-- 一级目录 --> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <i class="layui-icon layui-icon-right switch-toc"></i>  <a href="/doc/13858/" class="doc-link" data-id="13858" title="MLB IMES"> MLB IMES </a> </span> </div> <div class="sub-items"><ul class="doctree-ul"> <!-- 一级目录 --> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <a href="/doc/13859/" class="doc-link" data-id="13859" title="LNB换型事件标准内容"> <i class="iconfont mrdoc-icon-wendang"></i>  LNB换型事件标准内容 </a> </span> </div> </li> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <a href="/doc/13870/" class="doc-link" data-id="13870" title="LNB配置标准值"> <i class="iconfont mrdoc-icon-wendang"></i>  LNB配置标准值 </a> </span> </div> </li> </ul></div> </li> </ul> </nav> <div class="bq"> <a href="javascript:void(0);" class="mrdoc-link">立臻IT知识库</a> </div> <!-- 右下角广告块 --> <!-- 广告代码开始 --> <!-- 广告代码结束 --> </div> </div> <!-- 左侧目录栏结束 --> <div id="doc-container-splitter"></div> <button class="doc-container-sidebar-toggle" onclick="toggleSidebar()"> <svg class="doc-container-toggle-icon" viewBox="0 0 24 24" width="24" height="24"> <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/> </svg> </button> <!-- 右侧文档栏 --> <div id="doc-container-body"> <!-- 文档导航 --> <div class="doc-header" role="navigation"> <a class="btn pull-left js-toolbar-action" aria-label="" href="javascript:void(0);" title="切换侧边栏"> <i class="layui-icon layui-icon-slider"></i> </a> <a class="btn pull-left font-small layui-hide-xs" href="javascript:void(0);" title="缩小字体"> <i class="iconfont mrdoc-icon-font-size">-</i> </a> <a class="btn pull-left font-large layui-hide-xs" href="javascript:void(0);" title="放大字体"> <i class="iconfont mrdoc-icon-font-size">+</i> </a> <a class="btn pull-left font-switch layui-hide-xs" href="javascript:void(0);" title="切换字体类型"> <i class="iconfont mrdoc-icon-font-type"></i> </a> <a class="btn pull-left theme-switch" href="javascript:void(0);" title="切换至夜间模式"> <i class="iconfont mrdoc-icon-night"></i> </a> <!-- 顶部工具栏 --> <a class="btn pull-right" aria-label="" href="/"> <i class="layui-icon layui-icon-home"></i> <span class="layui-hide-xs">首页</span> </a> </div> <!-- 文档主体 --> <div class="doc-body-content"> <div class="doc-body-content-div"> <!-- 文档内容 --> <div class="doc-content" id="doc-content"> <!-- 标题 --> <div class="doc-info"> <!-- 页面主体头信息 --> <h1>LNB换型事件标准内容</h1><hr> <!-- 广告代码开始 --> <!-- 广告代码结束 --> </div> <!-- 标题结束 --> <!-- 正文开始 --> <div class="markdown-body" id="content"> <textarea style="display: none;">``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName> <SystemVersion>1.00</SystemVersion> <SessionId>6984</SessionId> <CommandName>CHANGE-REQUEST</CommandName> </Header> <CHANGE-REQUEST> <Index> <Element> <Date>2025/10/26,22:40:04</Date> <MCNo>8</MCNo> <Lane>1</Lane> <LotName>639-23039$AK0_T04A_2617</LotName> <Production>7264</Production> <PlannedProduction>0</PlannedProduction> <PassData>0</PassData> <DataCount>10</DataCount> <MountMode>1</MountMode> <LaneMode>1</LaneMode> </Element> </Index> </CHANGE-REQUEST> </root> ```</textarea> </div> <!-- 正文结束 --> <div class="markdown-body"> <!-- 文档附件 --> </div> <hr> </div> <!-- 分享栏 --> <div id="doc-content-bottom-toolbar" style="color: rgba(0,0,0,.65);padding-bottom: 10px;margin-top: 10px;"> <div class="layui-row" style="margin-bottom: 10px;padding-left: 20px;"> </div> <div class="layui-row layui-col-space20" style="padding-left: 20px;"> <span class="doc-bottom-icon"> <i class="layui-icon layui-icon-user"></i> 宋恒林(K17082150) </span> <span tooltip="更新于:2025年11月4日 11:50" class="doc-bottom-icon"> <i class="layui-icon layui-icon-log"></i> 2025年11月4日 11:50 </span> <button id="share" class="doc-bottom-btn" tooltip="转发本文档"> <i class="layui-icon layui-icon-share" ></i> 转发文档 </button> <span class="doc-bottom-icon"> <i class="layui-icon layui-icon-star" title="请登录后收藏"></i> 收藏文档 </span> </div> </div> <!-- 广告代码开始 --> <!-- 广告代码结束 --> <div class="layui-row page-flip" style="margin-top: 10px;padding:10px;display:flex;justify-content:space-around;"> <!-- <hr> --> <div> <a href="/doc/13858/" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-radius"><i class="layui-icon layui-icon-prev "></i>上一篇</a> </div> <div> <a href="/doc/13870/" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-radius">下一篇<i class="layui-icon layui-icon-next"></i></a> </div> </div> </div> <!-- 文档目录 --> <div id="toc-container" class='sidebar doc-toc-hide'></div> </div> </div> <!-- 右侧文档栏结束 --> </div> <!-- 右下角工具按钮 --> <div class="fixed-tool-bar"> <div class="toTop" ><i class="layui-icon layui-icon-up"></i></div> <a class="tocMenu" href="/feedback/?source=/doc/13859/" target="_blank" title="反馈问题"><i class="layui-icon layui-icon-help"></i></a> <!-- 修改文档 --> <!-- 目录 --> <div class="tocMenu" style="display: none;"><i class="iconfont mrdoc-icon-toc"></i></div> <!-- 分享按钮 --> </div> <!-- 转发选项卡模板 --> <div id="share_div" style="display: none;"> <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> <ul class="layui-tab-title"> <li class="layui-this">手机扫码</li> <li>复制链接</li> </ul> <div class="layui-tab-content" style="height: 100px;"> <div class="layui-tab-item layui-show" align='center'> <p style="font-weight: 700;margin-bottom: 10px;">手机扫一扫转发分享</p> <div id="url_qrcode"></div> </div> <div class="layui-tab-item mrdoc-margin-1" align='center'> <input type="text" id="copy_crt_url" name="current_url" class="layui-input" /><br> <button class="layui-btn layui-btn-xs" title="复制链接到粘贴板" style="background-color: #333;" id="copy_doc_url"">复制链接</button> </div> </div> </div> </div> <script src="/jsi18n/"></script> <script src="/static/jquery/3.5.0/jquery.min.js"></script> <script src="/static/PearAdminLayui/component/layui/layui.js?version=1.5.2"></script> <script src="/static/viewerjs/viewer.min.js?version=1.5.2"></script> <script src="/static/qrcodejs/qrcode.min.js?version=1.5.2"></script> <script src="/static/darkmode-js/darkmode-js.min.js?version=1.5.2"></script> <script src="/static/markjs/mark.min.js?version=1.5.2" charset="UTF-8"></script> <script> var layer = layui.layer; var laypage = layui.laypage; var dropdown = layui.dropdown; var element = layer.element; var pro_id = '129'; var csrf_token_str = 'FYiG9BvZxlszgMJHivQ94WymudTPAWw8wrFI75LcqJDTMGzZqTw1jexUzwRvAb0B'; var is_creater = false; var code_line_number = true; </script> <script src="/static/mrdoc/mrdoc-docs.js?version=1.5.2"></script> <script src="/static/iconFont/iconfont.js?version=1.5.2"></script> <script> var layer = layui.layer; var dropdown = layui.dropdown; var pro_id = '129'; var csrf_token_str = 'FYiG9BvZxlszgMJHivQ94WymudTPAWw8wrFI75LcqJDTMGzZqTw1jexUzwRvAb0B'; var doc_editor_mode; if(is_creater){ renderTocDropDown() } function renderTocDropDown(){ dropdown.render({ elem: '.doctree-item-btn', trigger:'hover', data: [ {title:'修改文档',id:'modify'}, {title:'新增文档',id:'add'}, {title:'复制链接',id:'copy'}, ], click:function(obj){ // console.log(obj) var elem = $(this.elem) // console.log(elem.data('id')) switch (obj.id) { case 'modify': window.location.href = `/modify_doc/${elem.data('id')}/`; break; case 'add': window.location.href = `/create_doc/?pid=${pro_id}&parent_id=${elem.data('id')}`; break; case 'copy': var baseURL = window.location.protocol + "//" + window.location.host copyToClipboard(`${baseURL}/doc/${elem.data('id')}/`) break; default: break; } } }); }; </script> <script src="/static/mr-marked/marked.min.js?version=1.5.2"></script> <!-- 文档评论相关js --> <!-- 动态添加广告代码 --> <div id="ad-1"> </div> <div id="ad-2"> </div> <div id="ad-3"> </div> <div id="ad-4"> </div> <script> $("#ad-1").appendTo($("#ad-code-1")); $("#ad-2").appendTo($("#ad-code-2")); $("#ad-3").appendTo($("#ad-code-3")); $("#ad-4").appendTo($("#ad-code-4")); </script> <!-- 广告代码结束 --> <!-- 统计代码开始 --> <!-- 统计代码结束 --> <!-- 解析渲染Markdown --> <script> var editor_mode = 1; var pro_id = 129; var doc_id = 13859; var is_auth = false; initDocRender(mode=editor_mode); // 图片放大显示 var img_options = { url: 'data-original', fullscreen:false,//全屏 rotatable:false,//旋转 scalable:false,//翻转 button:false,//关闭按钮 toolbar:false, title:false, }; var img_viewer = new Viewer(document.getElementById('content'), img_options); </script> <!-- 下载选项卡模板 --> <div id="download_div" style="display: none;"> <div class="layui-row" style="margin: 10px;"> <a class="layui-btn layui-btn-primary layui-btn-sm" download='LNB换型事件标准内容.md' href="/download_doc_md/13859/" target="_blank"> Markdown文件 </a> <button class="layui-btn layui-btn-primary layui-btn-sm" href="/download_doc_docx/13859/" id="download-doc-docx"> Word文件 </button> <button class="layui-btn layui-btn-primary layui-btn-sm" id="download-doc-pdf"> PDF文档 </button> <a href="?print=true" target="_blank" class="layui-btn layui-btn-primary layui-btn-sm" >PDF文档(打印)</a> </div> </div> <!-- 分享文档选项卡模板 --> <div id="share_doc_div" style="display: none;margin:10px;"> <div class="layui-tab-content"> <div class="layui-form layui-form-pane" lay-filter="show-share-form"> <div class="layui-form-item"> <label class="layui-form-label">分享</label> <div class="layui-input-block"> <input type="checkbox" name="switch" lay-skin="switch" lay-text="开启|关闭" lay-filter="share-switch" > </div> </div> <div class="layui-form" style="display: none;" id="share-link"> <div class="layui-form-item"> <label class="layui-form-label">链接</label> <div class="layui-input-block" id='copy_link'> <input type="text" name="share_link" class="layui-input" id="share_link" readonly> </div> </div> </div> <div class="layui-form-item" style="display:none;" id="share-type"> <label class="layui-form-label">类型</label> <div class="layui-input-block"> <input type="radio" name="share_type" value="0" title="公开" checked lay-filter="share_type"> <input type="radio" name="share_type" value="1" title="私密" lay-filter="share_type"> </div> </div> <div class="layui-form" style="display:none;" id="share_value_item"> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-inline"> <input type="text" name="share_value" value='' disabled class="layui-input" id="share_doc_value"> </div> <div class="layui-form-mid layui-word-aux"> <button class="layui-btn layui-btn-xs layui-btn-primary" id="updateShareValue"><i class="layui-icon layui-icon-refresh"></i> 更新密码</button> </div> </div> </div> <div class="layui-form-item" style="display:none;" id="share-expire"> <label class="layui-form-label">有效期</label> <div class="layui-input-block"> <input type="radio" name="expire_type" value="-1" title="永久" checked lay-filter="expire_type"> <input type="radio" name="expire_type" value="3" title="3天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="7" title="7天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="15" title="15天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="0" title="自定义" lay-filter="expire_type"> <div class="layui-input-inline" id="expire_date_item" style="display: none;"> <input type="text" class="layui-input" name="expire_date" id="expire_date" value="" autocomplete="off"> </div> </div> </div> </div> </div> </div> <script src="/static/toc/doctoc.js?version=1.5.2"></script> <script src="/static/clipboard/clipboard.min.js"></script> <script> var layer = layui.layer; var form = layui.form; var laydate = layui.laydate; var doc_editor_mode = '1'; // Ajax默认配置 $.ajaxSetup({ data: {csrfmiddlewaretoken: 'FYiG9BvZxlszgMJHivQ94WymudTPAWw8wrFI75LcqJDTMGzZqTw1jexUzwRvAb0B' }, headers: {"X-CSRFToken":'FYiG9BvZxlszgMJHivQ94WymudTPAWw8wrFI75LcqJDTMGzZqTw1jexUzwRvAb0B'}, }); // 非小屏默认展开文档目录 if(window.innerWidth > 1650){ $(".sidebar").toggleClass("doc-toc-hide"); } // 切换文档目录显示与否 $(".tocMenu").click(function() { // console.log("切换文档目录显示") $(".sidebar").toggleClass("doc-toc-hide"); }); //修改a标签链接新窗口打开 // $('#content').on('click','a',function(e){ // e.target.target = '_blank'; // }); // 显示文档下载弹出框 $("#download_doc").click(function(r){ var layer = layui.layer; layer.open({ type: 1, title: false, closeBtn: 0, area: ['350px','150px'], shadeClose: true, content: $('#download_div') }); }); // 生成随机分享码 function randomWord(randomFlag, min, max){ var str = "", range = min, arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; // 随机产生 if(randomFlag){ range = Math.round(Math.random() * (max-min)) + min; } for(var i=0; i<range; i++){ pos = Math.round(Math.random() * (arr.length-1)); str += arr[pos]; } return str; }; // 更新文档分享状态 function updateDocShare(data){ $.ajax({ url:"/share_doc/", method:'post', data:data, success:function(r){ if(r.status){ layer.msg("设置成功",{offset: 't'}) // console.log(r.data) $("input[name=share_link]").val(document.location.protocol + '//' + document.location.host + '/share_doc/?token=' + r.data.doc) }else{ layer.msg("设置出错") } }, error:function(){ layer.msg("文档分享异常") } }) } // 分享文档 $("#shareDoc").click(function(){ layer.open({ type:1, title:'分享文档:LNB换型事件标准内容', content:$("#share_doc_div"), area:'450px', success : function(index, layero) { // 成功弹出后回调 form.render(); }, cannel: function(){ $("#share_doc_div").hide(); } }) }) var share_data = { 'id':'13859', } laydate.render({ elem: '#expire_date', mini:1, done: function(value, date, endDate){ // console.log(value); share_data['expire_date'] = value; updateDocShare(share_data); } }); // 复制分享URL及分享码 var copy_share_link = new ClipboardJS('#copy_link', { text: function() { let share_val = form.val("show-share-form"); if(share_val['share_type'] == 0){ return share_val['share_link'] }else{ let share_link = share_val['share_link'] + "&pwd=" + share_val['share_value'] return share_link } } }); copy_share_link.on('success', function(e) { layer.msg("复制成功!") }); //监听分享框分享类型的单选事件 form.on('radio(share_type)', function(data){ // console.log(data.value); //被点击的radio的value值 if(data.value == 0){ // 公开 $("#share_value_item").css("display","none"); share_data['share_type'] = 0; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); }else if(data.value == 1){ // 私密 $("#share_value_item").css("display","block"); // console.log("初始化密码") $("#share_doc_value").val(randomWord(false,4)) share_data['share_type'] = 1; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); } }); // 监听分享有效期的单选事件 form.on('radio(expire_type)', function(data){ // console.log(data.value); //被点击的radio的value值 share_data['expire_type'] = data.value; if(data.value == 0){ // 自定义日期 $("#expire_date_item").css("display","block"); layer.msg("请选择日期") share_data['expire_date'] = $("#expire_date").val(); // updateDocShare(share_data); }else{ $("#expire_date_item").css("display","none"); updateDocShare(share_data); } }); // 监听分享开关事件 form.on('switch(share-switch)', function(data){ console.log(data.elem.checked); //开关是否开启,true或者false if(data.elem.checked){ // 开启 // console.log("开启分享") $("#share-type").css('display',"block"); $("#share-expire").css('display',"block"); $("#share-link").css("display","block"); if($("input[name='share_type']:checked").val() == 1){ $("#share_value_item").css("display","block"); } // 开启 share_data['is_enable'] = true updateDocShare(share_data); }else{ // console.log("关闭分享") layer.msg("关闭分享",{offset: 't'}) $("#share-type").css('display',"none") $("#share-expire").css('display',"none") $("#share_value_item").css("display","none"); $("#share-link").css("display","none"); share_data['is_enable'] = false updateDocShare(share_data); } }); // 更新文档分享密码 $("#updateShareValue").click(function(){ $("#share_doc_value").val(randomWord(false,4)); share_data['share_type'] = 1; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); }); // 评论组件 </script> <!-- 调用浏览器打印功能 --> <!-- 文档PDF生成 --> <script src="/static/jspdf/jspdf.umd.min.js?version=1.5.2 charset="utf-8"></script> <script src="/static/html2canvas/html2canvas.min.js?version=1.5.2 charset="utf-8"></script> <script type="text/javascript"> // 文档生成PDF function doc2pdf() { //将整个页面转成canvas html2canvas(document.getElementById("doc-content"),{useCORS:true,logging:true}).then(canvas => { var contentWidth = canvas.width; var contentHeight = canvas.height; //一页pdf显示html页面生成的canvas高度; var pageHeight = contentWidth / 592.28 * 841.89; //未生成pdf的html页面高度 var leftHeight = contentHeight; //页面偏移 var position = 0; //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高 var imgWidth = 555.28; //左右边距20 var imgHeight = 555.28/contentWidth * contentHeight; //左右边距20 var pageData = canvas.toDataURL('image/jpeg', 1.0); var doc = new jspdf.jsPDF('', 'pt', 'a4'); //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89) //当内容未超过pdf一页显示的范围,无需分页 if (leftHeight < pageHeight) { doc.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight ); //左右边距20 } else { while(leftHeight > 0) { doc.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight) //左右边距20 leftHeight -= pageHeight; position -= 841.89; //避免添加空白页 if(leftHeight > 0) { doc.addPage(); } } }; doc.save('LNB换型事件标准内容.pdf'); }); }; $("#download-doc-pdf").click(function(){ layer.load("PDF生成中……") doc2pdf(); layer.closeAll(); $("#download_div").css("display","none"); }) </script> <script> $("#download-doc-docx").click(function(){ layer.load() $.ajax({ url:'/download_doc_docx/13859/', type:'post', success:function(r){ layer.closeAll() if(r.status){ var downloadLink = $('<a></a>') .attr('href', r.data) downloadLink[0].click(); downloadLink.remove(); }else{ layer.msg(r.data) } }, error:function(){ layer.closeAll() layer.msg("文档导出Docx文件请求异常") } }) }) </script> <script> // 解析文档片段 parseFragment(); </script> <!-- 在线表格文档根据窗口高度调整表格高度 --> <!-- 文集作者或文档作者的JavaScript相关函数 --> <script> // 文档顶部「新建」按钮的下拉菜单 dropdown.render({ elem: '#create-doc-btn', trigger: 'hover', data: [ { title: '文本文档', id: 'text' },{ title: '表格文档', id: 'table' },{ title: '超链接', id: 'link' },{ title:'OnlyOffice', id:'OnlyOffice', },{ title:'思维导图', id:'mindmap', } ], click: function(data, othis){ if(data.id == 'text'){ window.location.href = '/create_doc/?pid=' + pro_id }else if(data.id == 'table'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=4' }else if(data.id == 'link'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=5' }else if(data.id == 'OnlyOffice'){ window.location.href = '/onlyoffice/create?pid=' + pro_id }else if(data.id == 'mindmap'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=9' } } }); // 侦听文集大纲滚动 // document.getElementById("doc-summary").addEventListener('scroll', function(){ // let t = $('.doc-summary').scrollTop(); // 目前监听的是整个body的滚动条距离 // let h = $('.doc-summary').height(); // 文集大纲的高度 // let a = document.getElementById("doc-search-input").offsetTop; // 搜索框至顶部的距离 // // console.log("滚动距离:",t,'div高度:',h,'顶部距离:',a) // if(t == 0){ // // console.log("在可视范围") // $('.project-search-div').removeClass('project-search-active-div') // }else{ // if (a >= t && a < (t + h)) { // // // console.log("在可视范围") // $('.project-search-div').removeClass('project-search-active-div') // } // else{ // // console.log("不在可视范围") // $('.project-search-div').addClass('project-search-active-div') // } // } // }); // 高亮搜索词 setTimeout(function(){ keyLight('doc-content',getQueryVariable("highlight")); scrollIntoKey('doc-content',getQueryVariable("highlight")); },500) document.addEventListener('mouseup', function() { var selection = window.getSelection().toString(); let { x , y } = getSelectionEndPosition(); // console.log(x,y) if (selection) { var range = window.getSelection().getRangeAt(0); var button = document.createElement('button'); button.id = "feedbackBtn"; button.textContent = '我要反馈'; var div = document.createElement('div'); div.appendChild(button); div.style.position = 'absolute'; button.classList.add("layui-btn","layui-btn-normal","layui-btn-xs","layui-btn-radius") div.style.top = y + window.pageYOffset + 'px'; div.style.left = x + window.pageXOffset + 'px'; // div.style.top = range.getBoundingClientRect().top + 30 + window.pageYOffset + 'px'; // div.style.left = range.getBoundingClientRect().right + window.pageXOffset + 'px'; document.body.appendChild(div); // range.commonAncestorContainer.parentNode.appendChild(div); document.addEventListener('mousedown', function(event) { if (event.target === button) { feedbackDialog({'url':document.location.href,'content':selection.toString()}); } else if (!div.contains(event.target)) { div.remove(); } }); } }); feedbackDialog = function(value){ // console.log(value['url'],value['content']) window.open("/feedback/?source="+value['url']+'&content='+value['content']) }; function getSelectionEndPosition() { let x, y; let selection = window.getSelection(); if (selection.rangeCount > 0) { let range = selection.getRangeAt(0); let startNode = range.startContainer; let startOffset = range.startOffset; let endNode = range.endContainer; let endOffset = range.endOffset; let tempRange = document.createRange(); tempRange.setStart(endNode, endOffset); tempRange.collapse(true); let clientRects = tempRange.getClientRects(); if (clientRects.length > 0) { let lastRect = clientRects[clientRects.length - 1]; x = lastRect.right; y = lastRect.bottom; } } return { x, y }; }; </script> <script> const docContainer = document.getElementById('doc-container'); const docSidebar = document.getElementById('doc-container-sidebar'); const docSplitter = document.getElementById('doc-container-splitter'); let isResizing = false; // 从 localStorage 获取上一次保存的宽度 const savedWidth = localStorage.getItem('sidebar-width'); if (savedWidth) { docContainer.style.setProperty('--sidebar-width', savedWidth); docSidebar.style.width = savedWidth; } docSplitter.addEventListener('mousedown', (e) => { isResizing = true; docSplitter.classList.add('active'); document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', () => { isResizing = false; docSplitter.classList.remove('active'); document.removeEventListener('mousemove', handleMouseMove); }); }); function handleMouseMove(e) { if (isResizing) { const containerRect = docContainer.getBoundingClientRect(); const newSidebarWidth = e.clientX - containerRect.left; // 限制最大宽度 const maxWidth = 800; // 可以根据需要修改 if (newSidebarWidth <= maxWidth) { // 保存当前宽度到 localStorage localStorage.setItem('sidebar-width', `${newSidebarWidth}px`); docContainer.style.setProperty('--sidebar-width', `${newSidebarWidth}px`); docSidebar.style.width = `${newSidebarWidth}px`; } } } </script> <!-- 微信JS-SDK开始 --> <!-- 微信JS-SDK结束 --> </body> </html> 用Python代码将上面的html格式内容转成json格式
11-05
D:\environment\anaconda3\envs\oracle\python.exe E:\Project\AIProject_2025\Agent\workorderAgent\compare_document.py html_content--> <!-- 继承自模板:app_doc/docs_base.html --> <!DOCTYPE html> <html lang="zh-cn" style="font-size: 15px;"> <head> <meta charset="UTF-8"> <meta name=renderer content=webkit> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <meta http-equiv="Cache-Control" content="max-age=7200" /> <!-- <meta name="referrer" content="no-referrer"> --> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="LNB换型事件标准内容,IMES FA 相关文档,技术,架构,流程,知识,规范,标准化"/> <meta name="description" content="``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName" /> <!-- OGP分享协议开始 --> <meta property="og:type" content="website"> <meta property="og:title" content="LNB换型事件标准内容 - IMES FA 相关文档"> <meta property="og:description" content="``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName"> <meta property="og:url" content="http://kk.luxsan-ict.com/doc/13859/"> <link rel="icon" href="/static/search/mrdoc_logo_300.png" sizes="192x192" /> <meta property="og:image" content="http://kk.luxsan-ict.com/static/search/mrdoc_logo_300.png"> <!-- OGP分享协议结束 --> <title>LNB换型事件标准内容 - IMES FA 相关文档 - 立臻IT知识库 </title> <link href="/static/PearAdminLayui/component/layui/css/layui.css?version=1.5.2" rel="stylesheet"> <link rel="stylesheet" href="/static/mr-marked/marked.css?version=1.5.2" /> <link href="/static/viewerjs/viewer.min.css?version=1.5.2" rel="stylesheet"> <link href="/static/mrdoc/mrdoc.css?version=1.5.2" rel="stylesheet"> <link href="/static/mrdoc/mrdoc-docs.css?version=1.5.2" rel="stylesheet"> <link href="/static/iconFont/iconfont.css?version=1.5.2" rel="stylesheet"> <style> .markdown-code .markdown-code-block pre,.vditor-reset > pre > code.hljs{ max-height: max-content!important; } code[class*=language-], pre[class*=language-]{ white-space: pre-wrap !important; } :not(pre)>code[class*=language-]{ white-space: inherit !important; } /* html{ filter: invert(1) hue-rotate(180deg); } */ </style> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> <![endif]--> </head> <body class="big-page"> <div id="doc-container"> <!-- 左侧目录栏 --> <div id="doc-container-sidebar" id="doc-summary"> <div> <!-- 左上角广告块 --> <!-- 广告代码开始 --> <!-- 广告代码结束 --> <!-- 文集名称 --> <div class="project-title"> <svg class="icon" aria-hidden="true"><use xlink:href="#mrdoc-icon-pro-2"></use></svg> <a href="/project/129/" >IMES FA 相关文档 </a> <i class="layui-icon layui-icon-star" style="cursor: pointer;" title="请登录后收藏"></i> <p> </p> </div> <!-- 文档搜索框 --> <form action="/project/129/" method="get" class="project-search-div" > <div id="doc-search-input"> <input type="text" name="kw" placeholder="在文集内搜索文档" value="" class="layui-input doc-search-input"> <button type="submit" style="position: absolute;top:15px;right: 20px;border: none;background-color: white;cursor:pointer"> <i class="layui-icon layui-icon-search"></i> </button> </div> </form> <!-- <hr> --> <!-- 遍历文集大纲 --> <!-- 如果文集的文档数量超过999,使用异步加载文集目录 --> <!-- 文档数量小于999,使用同步加载文集目录 --> <nav> <ul class=""> <!-- 一级目录 --> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <i class="layui-icon layui-icon-right switch-toc"></i>  <a href="/doc/13858/" class="doc-link" data-id="13858" title="MLB IMES"> MLB IMES </a> </span> </div> <div class="sub-items"><ul class="doctree-ul"> <!-- 一级目录 --> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <a href="/doc/13859/" class="doc-link" data-id="13859" title="LNB换型事件标准内容"> <i class="iconfont mrdoc-icon-wendang"></i>  LNB换型事件标准内容 </a> </span> </div> </li> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <a href="/doc/13870/" class="doc-link" data-id="13870" title="LNB配置标准值"> <i class="iconfont mrdoc-icon-wendang"></i>  LNB配置标准值 </a> </span> </div> </li> </ul></div> </li> </ul> </nav> <div class="bq"> <a href="javascript:void(0);" class="mrdoc-link">立臻IT知识库</a> </div> <!-- 右下角广告块 --> <!-- 广告代码开始 --> <!-- 广告代码结束 --> </div> </div> <!-- 左侧目录栏结束 --> <div id="doc-container-splitter"></div> <button class="doc-container-sidebar-toggle" onclick="toggleSidebar()"> <svg class="doc-container-toggle-icon" viewBox="0 0 24 24" width="24" height="24"> <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/> </svg> </button> <!-- 右侧文档栏 --> <div id="doc-container-body"> <!-- 文档导航 --> <div class="doc-header" role="navigation"> <a class="btn pull-left js-toolbar-action" aria-label="" href="javascript:void(0);" title="切换侧边栏"> <i class="layui-icon layui-icon-slider"></i> </a> <a class="btn pull-left font-small layui-hide-xs" href="javascript:void(0);" title="缩小字体"> <i class="iconfont mrdoc-icon-font-size">-</i> </a> <a class="btn pull-left font-large layui-hide-xs" href="javascript:void(0);" title="放大字体"> <i class="iconfont mrdoc-icon-font-size">+</i> </a> <a class="btn pull-left font-switch layui-hide-xs" href="javascript:void(0);" title="切换字体类型"> <i class="iconfont mrdoc-icon-font-type"></i> </a> <a class="btn pull-left theme-switch" href="javascript:void(0);" title="切换至夜间模式"> <i class="iconfont mrdoc-icon-night"></i> </a> <!-- 顶部工具栏 --> <a class="btn pull-right" aria-label="" href="/"> <i class="layui-icon layui-icon-home"></i> <span class="layui-hide-xs">首页</span> </a> </div> <!-- 文档主体 --> <div class="doc-body-content"> <div class="doc-body-content-div"> <!-- 文档内容 --> <div class="doc-content" id="doc-content"> <!-- 标题 --> <div class="doc-info"> <!-- 页面主体头信息 --> <h1>LNB换型事件标准内容</h1><hr> <!-- 广告代码开始 --> <!-- 广告代码结束 --> </div> <!-- 标题结束 --> <!-- 正文开始 --> <div class="markdown-body" id="content"> <textarea style="display: none;">``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName> <SystemVersion>1.00</SystemVersion> <SessionId>6984</SessionId> <CommandName>CHANGE-REQUEST</CommandName> </Header> <CHANGE-REQUEST> <Index> <Element> <Date>2025/10/26,22:40:04</Date> <MCNo>8</MCNo> <Lane>1</Lane> <LotName>639-23039$AK0_T04A_2617</LotName> <Production>7264</Production> <PlannedProduction>0</PlannedProduction> <PassData>0</PassData> <DataCount>10</DataCount> <MountMode>1</MountMode> <LaneMode>1</LaneMode> </Element> </Index> </CHANGE-REQUEST> </root> ```</textarea> </div> <!-- 正文结束 --> <div class="markdown-body"> <!-- 文档附件 --> </div> <hr> </div> <!-- 分享栏 --> <div id="doc-content-bottom-toolbar" style="color: rgba(0,0,0,.65);padding-bottom: 10px;margin-top: 10px;"> <div class="layui-row" style="margin-bottom: 10px;padding-left: 20px;"> </div> <div class="layui-row layui-col-space20" style="padding-left: 20px;"> <span class="doc-bottom-icon"> <i class="layui-icon layui-icon-user"></i> 宋恒林(K17082150) </span> <span tooltip="更新于:2025年11月4日 11:50" class="doc-bottom-icon"> <i class="layui-icon layui-icon-log"></i> 2025年11月4日 11:50 </span> <button id="share" class="doc-bottom-btn" tooltip="转发本文档"> <i class="layui-icon layui-icon-share" ></i> 转发文档 </button> <span class="doc-bottom-icon"> <i class="layui-icon layui-icon-star" title="请登录后收藏"></i> 收藏文档 </span> </div> </div> <!-- 广告代码开始 --> <!-- 广告代码结束 --> <div class="layui-row page-flip" style="margin-top: 10px;padding:10px;display:flex;justify-content:space-around;"> <!-- <hr> --> <div> <a href="/doc/13858/" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-radius"><i class="layui-icon layui-icon-prev "></i>上一篇</a> </div> <div> <a href="/doc/13870/" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-radius">下一篇<i class="layui-icon layui-icon-next"></i></a> </div> </div> </div> <!-- 文档目录 --> <div id="toc-container" class='sidebar doc-toc-hide'></div> </div> </div> <!-- 右侧文档栏结束 --> </div> <!-- 右下角工具按钮 --> <div class="fixed-tool-bar"> <div class="toTop" ><i class="layui-icon layui-icon-up"></i></div> <a class="tocMenu" href="/feedback/?source=/doc/13859/" target="_blank" title="反馈问题"><i class="layui-icon layui-icon-help"></i></a> <!-- 修改文档 --> <!-- 目录 --> <div class="tocMenu" style="display: none;"><i class="iconfont mrdoc-icon-toc"></i></div> <!-- 分享按钮 --> </div> <!-- 转发选项卡模板 --> <div id="share_div" style="display: none;"> <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> <ul class="layui-tab-title"> <li class="layui-this">手机扫码</li> <li>复制链接</li> </ul> <div class="layui-tab-content" style="height: 100px;"> <div class="layui-tab-item layui-show" align='center'> <p style="font-weight: 700;margin-bottom: 10px;">手机扫一扫转发分享</p> <div id="url_qrcode"></div> </div> <div class="layui-tab-item mrdoc-margin-1" align='center'> <input type="text" id="copy_crt_url" name="current_url" class="layui-input" /><br> <button class="layui-btn layui-btn-xs" title="复制链接到粘贴板" style="background-color: #333;" id="copy_doc_url"">复制链接</button> </div> </div> </div> </div> <script src="/jsi18n/"></script> <script src="/static/jquery/3.5.0/jquery.min.js"></script> <script src="/static/PearAdminLayui/component/layui/layui.js?version=1.5.2"></script> <script src="/static/viewerjs/viewer.min.js?version=1.5.2"></script> <script src="/static/qrcodejs/qrcode.min.js?version=1.5.2"></script> <script src="/static/darkmode-js/darkmode-js.min.js?version=1.5.2"></script> <script src="/static/markjs/mark.min.js?version=1.5.2" charset="UTF-8"></script> <script> var layer = layui.layer; var laypage = layui.laypage; var dropdown = layui.dropdown; var element = layer.element; var pro_id = '129'; var csrf_token_str = '9hHLbYlxdkYf55nfUhSKj3dAUzQCuVI1VzCbKwPfwCiTOcYqXo4NiKkf4UQfuYMw'; var is_creater = false; var code_line_number = true; </script> <script src="/static/mrdoc/mrdoc-docs.js?version=1.5.2"></script> <script src="/static/iconFont/iconfont.js?version=1.5.2"></script> <script> var layer = layui.layer; var dropdown = layui.dropdown; var pro_id = '129'; var csrf_token_str = '9hHLbYlxdkYf55nfUhSKj3dAUzQCuVI1VzCbKwPfwCiTOcYqXo4NiKkf4UQfuYMw'; var doc_editor_mode; if(is_creater){ renderTocDropDown() } function renderTocDropDown(){ dropdown.render({ elem: '.doctree-item-btn', trigger:'hover', data: [ {title:'修改文档',id:'modify'}, {title:'新增文档',id:'add'}, {title:'复制链接',id:'copy'}, ], click:function(obj){ // console.log(obj) var elem = $(this.elem) // console.log(elem.data('id')) switch (obj.id) { case 'modify': window.location.href = `/modify_doc/${elem.data('id')}/`; break; case 'add': window.location.href = `/create_doc/?pid=${pro_id}&parent_id=${elem.data('id')}`; break; case 'copy': var baseURL = window.location.protocol + "//" + window.location.host copyToClipboard(`${baseURL}/doc/${elem.data('id')}/`) break; default: break; } } }); }; </script> <script src="/static/mr-marked/marked.min.js?version=1.5.2"></script> <!-- 文档评论相关js --> <!-- 动态添加广告代码 --> <div id="ad-1"> </div> <div id="ad-2"> </div> <div id="ad-3"> </div> <div id="ad-4"> </div> <script> $("#ad-1").appendTo($("#ad-code-1")); $("#ad-2").appendTo($("#ad-code-2")); $("#ad-3").appendTo($("#ad-code-3")); $("#ad-4").appendTo($("#ad-code-4")); </script> <!-- 广告代码结束 --> <!-- 统计代码开始 --> <!-- 统计代码结束 --> <!-- 解析渲染Markdown --> <script> var editor_mode = 1; var pro_id = 129; var doc_id = 13859; var is_auth = false; initDocRender(mode=editor_mode); // 图片放大显示 var img_options = { url: 'data-original', fullscreen:false,//全屏 rotatable:false,//旋转 scalable:false,//翻转 button:false,//关闭按钮 toolbar:false, title:false, }; var img_viewer = new Viewer(document.getElementById('content'), img_options); </script> <!-- 下载选项卡模板 --> <div id="download_div" style="display: none;"> <div class="layui-row" style="margin: 10px;"> <a class="layui-btn layui-btn-primary layui-btn-sm" download='LNB换型事件标准内容.md' href="/download_doc_md/13859/" target="_blank"> Markdown文件 </a> <button class="layui-btn layui-btn-primary layui-btn-sm" href="/download_doc_docx/13859/" id="download-doc-docx"> Word文件 </button> <button class="layui-btn layui-btn-primary layui-btn-sm" id="download-doc-pdf"> PDF文档 </button> <a href="?print=true" target="_blank" class="layui-btn layui-btn-primary layui-btn-sm" >PDF文档(打印)</a> </div> </div> <!-- 分享文档选项卡模板 --> <div id="share_doc_div" style="display: none;margin:10px;"> <div class="layui-tab-content"> <div class="layui-form layui-form-pane" lay-filter="show-share-form"> <div class="layui-form-item"> <label class="layui-form-label">分享</label> <div class="layui-input-block"> <input type="checkbox" name="switch" lay-skin="switch" lay-text="开启|关闭" lay-filter="share-switch" > </div> </div> <div class="layui-form" style="display: none;" id="share-link"> <div class="layui-form-item"> <label class="layui-form-label">链接</label> <div class="layui-input-block" id='copy_link'> <input type="text" name="share_link" class="layui-input" id="share_link" readonly> </div> </div> </div> <div class="layui-form-item" style="display:none;" id="share-type"> <label class="layui-form-label">类型</label> <div class="layui-input-block"> <input type="radio" name="share_type" value="0" title="公开" checked lay-filter="share_type"> <input type="radio" name="share_type" value="1" title="私密" lay-filter="share_type"> </div> </div> <div class="layui-form" style="display:none;" id="share_value_item"> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-inline"> <input type="text" name="share_value" value='' disabled class="layui-input" id="share_doc_value"> </div> <div class="layui-form-mid layui-word-aux"> <button class="layui-btn layui-btn-xs layui-btn-primary" id="updateShareValue"><i class="layui-icon layui-icon-refresh"></i> 更新密码</button> </div> </div> </div> <div class="layui-form-item" style="display:none;" id="share-expire"> <label class="layui-form-label">有效期</label> <div class="layui-input-block"> <input type="radio" name="expire_type" value="-1" title="永久" checked lay-filter="expire_type"> <input type="radio" name="expire_type" value="3" title="3天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="7" title="7天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="15" title="15天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="0" title="自定义" lay-filter="expire_type"> <div class="layui-input-inline" id="expire_date_item" style="display: none;"> <input type="text" class="layui-input" name="expire_date" id="expire_date" value="" autocomplete="off"> </div> </div> </div> </div> </div> </div> <script src="/static/toc/doctoc.js?version=1.5.2"></script> <script src="/static/clipboard/clipboard.min.js"></script> <script> var layer = layui.layer; var form = layui.form; var laydate = layui.laydate; var doc_editor_mode = '1'; // Ajax默认配置 $.ajaxSetup({ data: {csrfmiddlewaretoken: '9hHLbYlxdkYf55nfUhSKj3dAUzQCuVI1VzCbKwPfwCiTOcYqXo4NiKkf4UQfuYMw' }, headers: {"X-CSRFToken":'9hHLbYlxdkYf55nfUhSKj3dAUzQCuVI1VzCbKwPfwCiTOcYqXo4NiKkf4UQfuYMw'}, }); // 非小屏默认展开文档目录 if(window.innerWidth > 1650){ $(".sidebar").toggleClass("doc-toc-hide"); } // 切换文档目录显示与否 $(".tocMenu").click(function() { // console.log("切换文档目录显示") $(".sidebar").toggleClass("doc-toc-hide"); }); //修改a标签链接新窗口打开 // $('#content').on('click','a',function(e){ // e.target.target = '_blank'; // }); // 显示文档下载弹出框 $("#download_doc").click(function(r){ var layer = layui.layer; layer.open({ type: 1, title: false, closeBtn: 0, area: ['350px','150px'], shadeClose: true, content: $('#download_div') }); }); // 生成随机分享码 function randomWord(randomFlag, min, max){ var str = "", range = min, arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; // 随机产生 if(randomFlag){ range = Math.round(Math.random() * (max-min)) + min; } for(var i=0; i<range; i++){ pos = Math.round(Math.random() * (arr.length-1)); str += arr[pos]; } return str; }; // 更新文档分享状态 function updateDocShare(data){ $.ajax({ url:"/share_doc/", method:'post', data:data, success:function(r){ if(r.status){ layer.msg("设置成功",{offset: 't'}) // console.log(r.data) $("input[name=share_link]").val(document.location.protocol + '//' + document.location.host + '/share_doc/?token=' + r.data.doc) }else{ layer.msg("设置出错") } }, error:function(){ layer.msg("文档分享异常") } }) } // 分享文档 $("#shareDoc").click(function(){ layer.open({ type:1, title:'分享文档:LNB换型事件标准内容', content:$("#share_doc_div"), area:'450px', success : function(index, layero) { // 成功弹出后回调 form.render(); }, cannel: function(){ $("#share_doc_div").hide(); } }) }) var share_data = { 'id':'13859', } laydate.render({ elem: '#expire_date', mini:1, done: function(value, date, endDate){ // console.log(value); share_data['expire_date'] = value; updateDocShare(share_data); } }); // 复制分享URL及分享码 var copy_share_link = new ClipboardJS('#copy_link', { text: function() { let share_val = form.val("show-share-form"); if(share_val['share_type'] == 0){ return share_val['share_link'] }else{ let share_link = share_val['share_link'] + "&pwd=" + share_val['share_value'] return share_link } } }); copy_share_link.on('success', function(e) { layer.msg("复制成功!") }); //监听分享框分享类型的单选事件 form.on('radio(share_type)', function(data){ // console.log(data.value); //被点击的radio的value值 if(data.value == 0){ // 公开 $("#share_value_item").css("display","none"); share_data['share_type'] = 0; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); }else if(data.value == 1){ // 私密 $("#share_value_item").css("display","block"); // console.log("初始化密码") $("#share_doc_value").val(randomWord(false,4)) share_data['share_type'] = 1; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); } }); // 监听分享有效期的单选事件 form.on('radio(expire_type)', function(data){ // console.log(data.value); //被点击的radio的value值 share_data['expire_type'] = data.value; if(data.value == 0){ // 自定义日期 $("#expire_date_item").css("display","block"); layer.msg("请选择日期") share_data['expire_date'] = $("#expire_date").val(); // updateDocShare(share_data); }else{ $("#expire_date_item").css("display","none"); updateDocShare(share_data); } }); // 监听分享开关事件 form.on('switch(share-switch)', function(data){ console.log(data.elem.checked); //开关是否开启,true或者false if(data.elem.checked){ // 开启 // console.log("开启分享") $("#share-type").css('display',"block"); $("#share-expire").css('display',"block"); $("#share-link").css("display","block"); if($("input[name='share_type']:checked").val() == 1){ $("#share_value_item").css("display","block"); } // 开启 share_data['is_enable'] = true updateDocShare(share_data); }else{ // console.log("关闭分享") layer.msg("关闭分享",{offset: 't'}) $("#share-type").css('display',"none") $("#share-expire").css('display',"none") $("#share_value_item").css("display","none"); $("#share-link").css("display","none"); share_data['is_enable'] = false updateDocShare(share_data); } }); // 更新文档分享密码 $("#updateShareValue").click(function(){ $("#share_doc_value").val(randomWord(false,4)); share_data['share_type'] = 1; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); }); // 评论组件 </script> <!-- 调用浏览器打印功能 --> <!-- 文档PDF生成 --> <script src="/static/jspdf/jspdf.umd.min.js?version=1.5.2 charset="utf-8"></script> <script src="/static/html2canvas/html2canvas.min.js?version=1.5.2 charset="utf-8"></script> <script type="text/javascript"> // 文档生成PDF function doc2pdf() { //将整个页面转成canvas html2canvas(document.getElementById("doc-content"),{useCORS:true,logging:true}).then(canvas => { var contentWidth = canvas.width; var contentHeight = canvas.height; //一页pdf显示html页面生成的canvas高度; var pageHeight = contentWidth / 592.28 * 841.89; //未生成pdf的html页面高度 var leftHeight = contentHeight; //页面偏移 var position = 0; //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高 var imgWidth = 555.28; //左右边距20 var imgHeight = 555.28/contentWidth * contentHeight; //左右边距20 var pageData = canvas.toDataURL('image/jpeg', 1.0); var doc = new jspdf.jsPDF('', 'pt', 'a4'); //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89) //当内容未超过pdf一页显示的范围,无需分页 if (leftHeight < pageHeight) { doc.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight ); //左右边距20 } else { while(leftHeight > 0) { doc.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight) //左右边距20 leftHeight -= pageHeight; position -= 841.89; //避免添加空白页 if(leftHeight > 0) { doc.addPage(); } } }; doc.save('LNB换型事件标准内容.pdf'); }); }; $("#download-doc-pdf").click(function(){ layer.load("PDF生成中……") doc2pdf(); layer.closeAll(); $("#download_div").css("display","none"); }) </script> <script> $("#download-doc-docx").click(function(){ layer.load() $.ajax({ url:'/download_doc_docx/13859/', type:'post', success:function(r){ layer.closeAll() if(r.status){ var downloadLink = $('<a></a>') .attr('href', r.data) downloadLink[0].click(); downloadLink.remove(); }else{ layer.msg(r.data) } }, error:function(){ layer.closeAll() layer.msg("文档导出Docx文件请求异常") } }) }) </script> <script> // 解析文档片段 parseFragment(); </script> <!-- 在线表格文档根据窗口高度调整表格高度 --> <!-- 文集作者或文档作者的JavaScript相关函数 --> <script> // 文档顶部「新建」按钮的下拉菜单 dropdown.render({ elem: '#create-doc-btn', trigger: 'hover', data: [ { title: '文本文档', id: 'text' },{ title: '表格文档', id: 'table' },{ title: '超链接', id: 'link' },{ title:'OnlyOffice', id:'OnlyOffice', },{ title:'思维导图', id:'mindmap', } ], click: function(data, othis){ if(data.id == 'text'){ window.location.href = '/create_doc/?pid=' + pro_id }else if(data.id == 'table'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=4' }else if(data.id == 'link'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=5' }else if(data.id == 'OnlyOffice'){ window.location.href = '/onlyoffice/create?pid=' + pro_id }else if(data.id == 'mindmap'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=9' } } }); // 侦听文集大纲滚动 // document.getElementById("doc-summary").addEventListener('scroll', function(){ // let t = $('.doc-summary').scrollTop(); // 目前监听的是整个body的滚动条距离 // let h = $('.doc-summary').height(); // 文集大纲的高度 // let a = document.getElementById("doc-search-input").offsetTop; // 搜索框至顶部的距离 // // console.log("滚动距离:",t,'div高度:',h,'顶部距离:',a) // if(t == 0){ // // console.log("在可视范围") // $('.project-search-div').removeClass('project-search-active-div') // }else{ // if (a >= t && a < (t + h)) { // // // console.log("在可视范围") // $('.project-search-div').removeClass('project-search-active-div') // } // else{ // // console.log("不在可视范围") // $('.project-search-div').addClass('project-search-active-div') // } // } // }); // 高亮搜索词 setTimeout(function(){ keyLight('doc-content',getQueryVariable("highlight")); scrollIntoKey('doc-content',getQueryVariable("highlight")); },500) document.addEventListener('mouseup', function() { var selection = window.getSelection().toString(); let { x , y } = getSelectionEndPosition(); // console.log(x,y) if (selection) { var range = window.getSelection().getRangeAt(0); var button = document.createElement('button'); button.id = "feedbackBtn"; button.textContent = '我要反馈'; var div = document.createElement('div'); div.appendChild(button); div.style.position = 'absolute'; button.classList.add("layui-btn","layui-btn-normal","layui-btn-xs","layui-btn-radius") div.style.top = y + window.pageYOffset + 'px'; div.style.left = x + window.pageXOffset + 'px'; // div.style.top = range.getBoundingClientRect().top + 30 + window.pageYOffset + 'px'; // div.style.left = range.getBoundingClientRect().right + window.pageXOffset + 'px'; document.body.appendChild(div); // range.commonAncestorContainer.parentNode.appendChild(div); document.addEventListener('mousedown', function(event) { if (event.target === button) { feedbackDialog({'url':document.location.href,'content':selection.toString()}); } else if (!div.contains(event.target)) { div.remove(); } }); } }); feedbackDialog = function(value){ // console.log(value['url'],value['content']) window.open("/feedback/?source="+value['url']+'&content='+value['content']) }; function getSelectionEndPosition() { let x, y; let selection = window.getSelection(); if (selection.rangeCount > 0) { let range = selection.getRangeAt(0); let startNode = range.startContainer; let startOffset = range.startOffset; let endNode = range.endContainer; let endOffset = range.endOffset; let tempRange = document.createRange(); tempRange.setStart(endNode, endOffset); tempRange.collapse(true); let clientRects = tempRange.getClientRects(); if (clientRects.length > 0) { let lastRect = clientRects[clientRects.length - 1]; x = lastRect.right; y = lastRect.bottom; } } return { x, y }; }; </script> <script> const docContainer = document.getElementById('doc-container'); const docSidebar = document.getElementById('doc-container-sidebar'); const docSplitter = document.getElementById('doc-container-splitter'); let isResizing = false; // 从 localStorage 获取上一次保存的宽度 const savedWidth = localStorage.getItem('sidebar-width'); if (savedWidth) { docContainer.style.setProperty('--sidebar-width', savedWidth); docSidebar.style.width = savedWidth; } docSplitter.addEventListener('mousedown', (e) => { isResizing = true; docSplitter.classList.add('active'); document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', () => { isResizing = false; docSplitter.classList.remove('active'); document.removeEventListener('mousemove', handleMouseMove); }); }); function handleMouseMove(e) { if (isResizing) { const containerRect = docContainer.getBoundingClientRect(); const newSidebarWidth = e.clientX - containerRect.left; // 限制最大宽度 const maxWidth = 800; // 可以根据需要修改 if (newSidebarWidth <= maxWidth) { // 保存当前宽度到 localStorage localStorage.setItem('sidebar-width', `${newSidebarWidth}px`); docContainer.style.setProperty('--sidebar-width', `${newSidebarWidth}px`); docSidebar.style.width = `${newSidebarWidth}px`; } } } </script> <!-- 微信JS-SDK开始 --> <!-- 微信JS-SDK结束 --> </body> </html> Process finished with exit code 0 将上面的html格式转成json格式,写Python代码获取
最新发布
11-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值