| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993 |
- <template>
- <view
- v-if="isShow"
- class="bottomTools"
- :style="{
- 'padding-bottom': pb,
- }"
- >
- <!-- Error -->
- <template v-if="tabTitle == 'Error'">
- <view
- class="miniBtn mr warn"
- @click="emptyLogs('error')"
- >
- <text class="miniBtnText">清空 x</text>
- </view>
- <btnTabs
- :list="errorTypeList"
- :value="errorTypeIndex"
- @indexChange="errorTypeIndexChange"
- />
- </template>
- <!-- Console -->
- <template v-if="tabTitle == 'Console'">
- <view
- class="miniBtn mr warn"
- @click="emptyLogs('console')"
- >
- <text class="miniBtnText">清空 x</text>
- </view>
- <btnTabs
- :list="consoleTypeList"
- :value="consoleTypeListIndex"
- @indexChange="consoleTypeIndexChange"
- />
- </template>
- <!-- Network -->
- <template v-if="tabTitle == 'Network'">
- <view
- class="miniBtn mr warn"
- @click="emptyLogs('network')"
- >
- <text class="miniBtnText">清空 x</text>
- </view>
- <MenuBtn
- :list="networkFilterType"
- :value="networkTypeListIndex"
- @indexChange="networkTypeIndexChange"
- title="筛选:"
- />
- <view class="mr"></view>
- <RequestSpeedLimit />
- <view class="mr"></view>
- <RequestTimeoutMock />
- </template>
- <!-- Pages -->
- <template v-if="tabTitle == 'Pages'">
- <view
- class="miniBtn mr warn"
- @click="emptyLogs('pages_1')"
- >
- <text class="miniBtnText">清空停留统计</text>
- </view>
- <view
- class="miniBtn mr warn"
- @click="emptyLogs('pages_2')"
- >
- <text class="miniBtnText">清空日活统计</text>
- </view>
- <view
- class="miniBtn mr primary"
- @click="goPage"
- >
- <text class="miniBtnText">跳转页面</text>
- </view>
- </template>
- <!-- Logs -->
- <template v-if="tabTitle == 'Logs'">
- <view
- class="miniBtn mr warn"
- @click="emptyLogs('logs')"
- >
- <text class="miniBtnText">清空 x</text>
- </view>
- </template>
- <!-- Storage -->
- <template v-if="tabTitle == 'Storage'">
- <view
- class="miniBtn mr warn"
- @click="emptyLogs('storage')"
- >
- <text class="miniBtnText">清空 x</text>
- </view>
- <!-- #ifdef H5 -->
- <btnTabs
- :list="storageFilterTypeList"
- :value="storageTypeListIndex"
- @indexChange="storageTypeIndexChange"
- />
- <!-- #endif -->
- <view
- class="miniBtn primary ml"
- @click="addStorage"
- >
- <text class="miniBtnText">新增数据+</text>
- </view>
- </template>
- <!-- UniBus -->
- <template v-if="tabTitle == 'UniBus'">
- <view
- class="miniBtn mr warn"
- @click="emptyLogs('UniBus')"
- >
- <text class="miniBtnText">清空 x</text>
- </view>
- <btnTabs
- :list="busFilterType"
- :value="busTypeListIndex"
- @indexChange="busTypeIndexChange"
- />
- </template>
- <!-- FileSys -->
- <template v-if="tabTitle == 'FileSys'">
- <!-- #ifdef APP-PLUS || MP-WEIXIN -->
- <scroll-view
- scroll-x
- class="dirList"
- >
- <view class="dirScrollItem">
- <text
- class="dirName"
- style="color: #999"
- @click="$emit('goChildDir', '_goIndex_0')"
- >
- {{ options.fileSysDirType }}
- </text>
- <text class="delimiter">/</text>
- <view
- v-for="(item, index) in options.fileSysDirList"
- :key="index"
- class="dirItem"
- >
- <text
- v-if="index != 0"
- class="delimiter"
- >
- /
- </text>
- <text
- class="dirName"
- @click="$emit('goChildDir', '_goIndex_' + (index + 1))"
- >
- {{ item }}
- </text>
- </view>
- </view>
- </scroll-view>
- <view
- class="miniBtn mr warn"
- @click="emptyFolder"
- >
- <text class="miniBtnText">清空 x</text>
- </view>
- <!-- #ifdef APP-PLUS -->
- <btnTabs
- :list="dirTypeList"
- :value="fileTypeListIndex"
- @indexChange="$emit('changeFileDirType', dirTypeList[$event].type)"
- />
- <view style="width: 20rpx"></view>
- <!-- #endif -->
- <view
- class="miniBtn primary"
- @click="createDir"
- >
- <text class="miniBtnText">新建文件(夹)</text>
- </view>
- <!-- #endif -->
- </template>
- <!-- JsRunner -->
- <template v-if="tabTitle == 'JsRunner'">
- <view class="jsRunnerTools">
- <view class="runOptions">
- <view class="radiusList">
- <text class="runType">运行环境:</text>
- <radio-group
- @change="jsRunType = $event.detail.value"
- class="radiusList"
- style="display: flex; flex-direction: row"
- >
- <view
- v-for="(item, index) in jsRunTypeList"
- :key="index"
- class="radiusItem"
- @click="jsRunType = item"
- >
- <radio
- class="radiusRadio"
- :value="item"
- :checked="jsRunType == item"
- color="#ff2d55"
- />
- <text
- class="radiusText"
- :style="{
- color: jsRunType == item ? '#ff2d55' : '#333',
- }"
- >
- {{ item }}
- </text>
- </view>
- </radio-group>
- </view>
- <view
- class="hisEmpty"
- @click="$emit('emptyCodeHis')"
- v-if="options.codeHisLength > 0"
- >
- <image
- class="hisEmptyIcon"
- src="@/devTools/page/static/delete.png"
- />
- <text class="hisEmptyText">清空记录</text>
- </view>
- <view
- class="logList"
- @click="showHisCode"
- >
- <text class="hisText">历史代码</text>
- <image
- class="unfold"
- src="@/devTools/page/static/unfold.png"
- />
- </view>
- </view>
- <view class="code">
- <textarea
- v-model="waitSendCode"
- class="codeInput"
- placeholder="js code ..."
- maxlength="-1"
- />
- <view
- class="codeSend"
- @click="runJs"
- >
- <text class="codeSendText">run</text>
- </view>
- </view>
- </view>
- </template>
- <!-- Vuex -->
- <template v-if="tabTitle == 'Vuex'">
- <btnTabs
- :list="stateTypeList"
- :value="stateTypeListIndex"
- @indexChange="stateTypeIndexChange"
- />
- </template>
- <codeHisPicker ref="codeHisPicker" />
- </view>
- </template>
- <script>
- import devCache from "../../core/libs/devCache";
- import appDelDir from "./libs/appDelDir";
- import btnTabs from "./ui/btnTabs.vue";
- import codeHisPicker from "./ui/codeHisPicker.vue";
- import MenuBtn from "./ui/menuBtn.vue";
- import RequestSpeedLimit from "./ui/requestSpeedLimit.vue";
- import RequestTimeoutMock from "./ui/requestTimeoutMock.vue";
- export default {
- components: {
- btnTabs,
- codeHisPicker,
- MenuBtn,
- RequestSpeedLimit,
- RequestTimeoutMock,
- },
- props: {
- /**
- * 列表索引
- */
- tabIndex: {
- type: Number,
- default: 0,
- },
- /**
- * 当前标题
- */
- tabTitle: {
- type: String,
- default: "",
- },
- /**
- * 配置项
- */
- options: {
- type: Object,
- default: () => ({
- errorFilterType: "",
- consoleFilterType: "",
- networkFilterType: "",
- busFilterType: "",
- fileSysDirList: [],
- fileSysDirType: "",
- storageType: "",
- }),
- },
- /**
- * 是否渲染
- */
- isShow: {
- type: Boolean,
- default: false,
- },
- /**
- * Vuex变量类型
- */
- stateType: {
- type: String,
- default: "vuex",
- },
- },
- data() {
- let pb = "20px";
- // #ifdef H5
- pb = "8px";
- // #endif
- let sys = uni.getSystemInfoSync();
- if (sys.platform == "ios") {
- pb = "40px";
- }
- let jsRunTypeList = [];
- // #ifdef H5
- jsRunTypeList = ["h5"];
- // #endif
- // #ifdef APP-PLUS
- jsRunTypeList = ["nvue", "webview"];
- // #endif
- return {
- /**
- * 底部边距
- */
- pb,
- /**
- * 错误类型列表
- */
- errorTypeList: [
- { title: "全部", type: "" },
- { title: "error", type: "ve" },
- { title: "warn", type: "vw" },
- { title: "jsError", type: "oe" },
- { title: "unknown", type: "n" },
- ],
- /**
- * console过滤类型
- */
- consoleTypeList: [
- { title: "全部", type: "" },
- { title: "log", type: "log" },
- { title: "info", type: "info" },
- { title: "warn", type: "warn" },
- { title: "error", type: "error" },
- ],
- /**
- * 请求过滤类型
- */
- networkFilterType: [
- { title: "全部请求", type: "", msg: "不使用筛选" },
- { title: "请求失败", type: "请求失败", msg: "仅展示请求失败的记录" },
- { title: "1s+", type: "1s+", msg: "仅展示响应超过1秒的记录" },
- { title: "5s+", type: "5s+", msg: "仅展示响应超过5秒的记录" },
- { title: "10s+", type: "10s+", msg: "仅展示响应超过10秒的记录" },
- { title: "500KB+", type: "500KB+", msg: "仅展示响应内容超过500KB的记录" },
- { title: "1MB+", type: "1MB+", msg: "仅展示响应内容超过1MB的记录" },
- { title: "get", type: "get", msg: "仅展示get请求" },
- { title: "post", type: "post", msg: "仅展示post请求" },
- { title: "other", type: "other", msg: "除了get和post的其他请求" },
- ],
- /**
- * uni bus 过滤类型
- */
- busFilterType: [
- { title: "全部", type: "" },
- { title: "on", type: "on" },
- { title: "once", type: "once" },
- { title: "emit", type: "emit" },
- { title: "off", type: "off" },
- ],
- /**
- * 文件类型
- */
- dirTypeList: [
- { title: "_doc", type: "PRIVATE_DOC" },
- { title: "_www", type: "PRIVATE_WWW" },
- { title: "公共文档", type: "PUBLIC_DOCUMENTS" },
- { title: "公共下载", type: "PUBLIC_DOWNLOADS" },
- ],
- /**
- * 缓存类型
- */
- storageFilterTypeList: [
- { title: "localStorage", type: "localStorage" },
- { title: "sessionStorage", type: "sessionStorage" },
- { title: "cookie", type: "cookie" },
- ],
- /**
- * 等待执行的js代码
- */
- waitSendCode: "",
- /**
- * js运行类型
- */
- jsRunType: jsRunTypeList[0],
- jsRunTypeList,
- /**
- * Vuex变量类型
- */
- stateTypeList: [
- { title: "vuex", type: "vuex" },
- { title: "pinia", type: "pinia" },
- { title: "globalData", type: "globalData" },
- ],
- };
- },
- computed: {
- /**
- * 错误筛选分类index
- */
- errorTypeIndex() {
- return this.errorTypeList.findIndex((x) => x.type == this.options.errorFilterType);
- },
- /**
- * 日志分类索引
- */
- consoleTypeListIndex() {
- return this.consoleTypeList.findIndex((x) => x.type == this.options.consoleFilterType);
- },
- /**
- * 网络筛选索引
- */
- networkTypeListIndex() {
- return this.networkFilterType.findIndex((x) => x.type == this.options.networkFilterType);
- },
- /**
- * bus分类索引
- */
- busTypeListIndex() {
- return this.busFilterType.findIndex((x) => x.type == this.options.busFilterType);
- },
- /**
- * 文件分类索引
- */
- fileTypeListIndex() {
- return this.dirTypeList.findIndex((x) => x.type == this.options.fileSysDirType);
- },
- /**
- * 缓存类型索引
- */
- storageTypeListIndex() {
- return this.storageFilterTypeList.findIndex((x) => x.type == this.options.storageType);
- },
- /**
- * Vuex变量类型
- */
- stateTypeListIndex() {
- return this.stateTypeList.findIndex((x) => x.type == this.stateType);
- },
- },
- methods: {
- /**
- * 过滤类型改变
- */
- filterTypeChange(type) {
- this.$emit("filterTypeChange", type);
- },
- /**
- * 错误类型索引改变
- */
- errorTypeIndexChange(e) {
- this.filterTypeChange(this.errorTypeList[e].type);
- },
- /**
- * 日志分类索引改变
- */
- consoleTypeIndexChange(e) {
- this.filterTypeChange(this.consoleTypeList[e].type);
- },
- /**
- * 网络状态筛选改变事件
- */
- networkTypeIndexChange(e) {
- this.filterTypeChange(this.networkFilterType[e].type);
- },
- /**
- * bus筛选改变事件
- */
- busTypeIndexChange(e) {
- this.filterTypeChange(this.busFilterType[e].type);
- },
- /**
- * 文件分类改变事件
- */
- fileTypeIndexChange(e) {
- this.$emit("changeFileDirType", this.dirTypeList[e].type);
- },
- /**
- * 缓存类型改变事件
- */
- storageTypeIndexChange(e) {
- this.$emit("changeStorageType", this.storageFilterTypeList[e].type);
- },
- /**
- * Vuex变量类型改变事件
- */
- stateTypeIndexChange(e) {
- this.$emit("changeStateType", this.stateTypeList[e].type);
- },
- /**
- * 清空日志
- */
- emptyLogs(type) {
- let that = this;
- let title = {
- error: "报错记录",
- console: "console",
- network: "请求日志",
- pages_1: "页面停留统计",
- pages_2: "页面日活统计",
- logs: "Logs",
- UniBus: "UniBus",
- storage: "Storage",
- };
- // #ifdef H5
- if (type == "storage") {
- title[type] = this.options.storageType;
- }
- // #endif
- uni.showModal({
- title: "警告",
- content: `是否确认清空${title[type]}全部数据?`,
- success(e) {
- if (e.confirm) {
- uni.showLoading({
- title: "处理中...",
- });
- if (type == "error") {
- devCache.set("errorReport", []);
- } else if (type == "console") {
- uni.$emit("devTools_delConsoleAll");
- } else if (type == "network") {
- uni.$emit("devTools_delNetworkAll");
- } else if (type == "logs") {
- devCache.set("logReport", []);
- } else if (type == "UniBus") {
- uni.$emit("devTools_delUniBusAll");
- } else if (type == "pages_1") {
- devCache.set("pageCount", []);
- } else if (type == "pages_2") {
- devCache.set("dayOnline", []);
- } else if (type == "storage") {
- that.delStorage();
- }
- setTimeout(() => {
- that.$emit("getPage");
- }, 5500);
- setTimeout(() => {
- uni.hideLoading();
- uni.showToast({
- title: "清空成功!",
- icon: "success",
- });
- }, 5000);
- }
- },
- });
- },
- /**
- * 清空全部缓存
- */
- delStorage() {
- // #ifdef APP-PLUS
- let keys = plus.storage.getAllKeys();
- for (let i = 0; i < keys.length; i++) {
- const key = String(keys[i]);
- if (key.indexOf("devTools_") == 0) {
- continue;
- }
- uni.removeStorageSync(key);
- }
- // #endif
- // #ifdef H5
- if (this.options.storageType == "localStorage") {
- for (let i = 0; i < localStorage.length; i++) {
- let key = String(localStorage.key(i));
- if (key.indexOf("devTools_") == 0) {
- continue;
- }
- uni.removeStorageSync(key);
- }
- } else if (this.options.storageType == "sessionStorage") {
- for (let i = 0; i < sessionStorage.length; i++) {
- let key = String(sessionStorage.key(i));
- if (key.indexOf("devTools_") == 0) {
- continue;
- }
- sessionStorage.removeItem(key);
- }
- } else if (this.options.storageType == "cookie") {
- let keys = [];
- document.cookie.split(";").forEach((cookieStr) => {
- const [name, value] = cookieStr.trim().split("=");
- keys.push(name);
- });
- keys.map((k) => {
- document.cookie = `${k}=;expires=` + new Date(new Date().getTime() + 200).toGMTString() + ";path=/";
- });
- }
- // #endif
- // #ifdef MP
- let keyList = devCache.get("storage");
- if (!keyList) keyList = [];
- for (let i = 0; i < keyList.length; i++) {
- const key = keyList[i];
- if (key.indexOf("devTools_") == 0) {
- continue;
- }
- uni.removeStorageSync(key);
- }
- // #endif
- },
- /**
- * 清空文件夹
- */
- emptyFolder() {
- let that = this;
- if (that.options.fileSysDirType == "PRIVATE_WWW") {
- return uni.showToast({
- title: "该目录不可删除",
- icon: "none",
- });
- }
- uni.showModal({
- title: "提示",
- content: "是否确认清空全部文件?",
- success(res) {
- if (res.confirm) {
- uni.showLoading({
- title: "清空中",
- });
- let path = "";
- switch (that.options.fileSysDirType) {
- case "wx":
- path = wx.env.USER_DATA_PATH;
- break;
- case "PRIVATE_DOC":
- path = "_doc";
- break;
- case "PUBLIC_DOCUMENTS":
- path = "_documents";
- break;
- case "PUBLIC_DOWNLOADS":
- path = "_downloads";
- break;
- default:
- break;
- }
- // #ifdef APP-PLUS
- appDelDir(path + "/", false)
- .then(() => {
- uni.hideLoading();
- uni.showToast({
- title: "清空成功!",
- icon: "success",
- });
- that.$emit("getPage");
- })
- .catch(() => {
- uni.hideLoading();
- uni.showToast({
- title: "清空失败!",
- icon: "none",
- });
- });
- // #endif
- // #ifdef MP-WEIXIN
- let fs = wx.getFileSystemManager();
- fs.rmdir({
- dirPath: path + "/",
- recursive: true,
- success() {
- uni.hideLoading();
- uni.showToast({
- title: "清空成功!",
- icon: "success",
- });
- that.$emit("getPage");
- },
- fail() {
- uni.hideLoading();
- uni.showToast({
- title: "清空失败!",
- icon: "none",
- });
- },
- });
- // #endif
- }
- },
- });
- },
- /**
- * 创建文件夹
- */
- createDir() {
- let that = this;
- let menu = [
- {
- text: `新建文件`,
- click() {
- that.$emit("editDirName", {
- isEdit: false,
- isDir: false,
- });
- },
- },
- {
- text: `新建文件夹`,
- click() {
- that.$emit("editDirName", {
- isEdit: false,
- isDir: true,
- });
- },
- },
- ];
- uni.showActionSheet({
- itemList: menu.map((x) => x.text),
- success({ tapIndex }) {
- menu[tapIndex].click();
- },
- });
- },
- /**
- * 新增缓存
- */
- addStorage() {
- uni.$emit("devTools_showAddStorageDialog");
- },
- /**
- * 执行js
- */
- runJs() {
- let that = this;
- if (this.waitSendCode == "") {
- return uni.showToast({
- title: "请先输入需要执行的js代码",
- icon: "none",
- });
- } else {
- let code = String(this.waitSendCode);
- this.$emit("runJs", { code, type: that.jsRunType });
- this.waitSendCode = "";
- }
- },
- /**
- * 获取历史代码运行记录
- */
- showHisCode() {
- let that = this;
- let his = devCache.get("codeRunHis");
- if (!his) his = [];
- if (his.length == 0) {
- return uni.showToast({
- title: "暂无记录!",
- icon: "none",
- });
- }
- that.$refs.codeHisPicker.show(his).then((res) => {
- that.waitSendCode = res;
- });
- },
- /**
- * 跳转指定页面
- */
- goPage() {
- uni.$emit("devTools_showRouteDialog");
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- .bottomTools {
- position: fixed;
- z-index: 3;
- bottom: 0;
- left: 0;
- width: 750rpx;
- border-top: 1px solid rgba(0, 0, 0, 0.05);
- background-color: #fff;
- padding-top: 15rpx;
- padding-left: 20rpx;
- padding-right: 20rpx;
- display: flex;
- flex-wrap: wrap;
- flex-direction: row;
- align-items: center;
- .mr {
- margin-right: 20rpx;
- }
- .mt {
- margin-left: 20rpx;
- }
- .ml {
- margin-left: 20rpx;
- }
- .miniBtn {
- height: 40rpx;
- border-radius: 8rpx;
- padding: 0 10rpx;
- border: 1px solid rgba(0, 0, 0, 0.05);
- &.warn {
- background-color: rgb(255, 251, 229);
- }
- &.primary {
- background-color: #ecf5ff;
- }
- .miniBtnText {
- font-size: 20rpx;
- height: 40rpx;
- line-height: 40rpx;
- }
- }
- }
- .dirList {
- display: flex;
- flex-direction: row;
- align-items: center;
- width: 710rpx;
- height: 34rpx;
- margin-bottom: 10rpx;
- /* #ifndef APP-PLUS */
- white-space: nowrap;
- /* #endif */
- .dirScrollItem {
- display: flex;
- flex-direction: row;
- align-items: center;
- height: 34rpx;
- }
- .dirItem {
- display: flex;
- flex-direction: row;
- align-items: center;
- }
- .delimiter {
- color: #999;
- margin: 0 6rpx;
- font-size: 22rpx;
- line-height: 34rpx;
- }
- .dirName {
- color: #333;
- font-size: 22rpx;
- line-height: 34rpx;
- height: 34rpx;
- padding: 0 6rpx;
- background-color: rgba(0, 0, 0, 0.02);
- border-radius: 6rpx;
- }
- }
- .jsRunnerTools {
- display: flex;
- flex-direction: column;
- width: 710rpx;
- .runOptions {
- display: flex;
- flex-direction: row;
- align-items: center;
- width: 710rpx;
- justify-content: space-between;
- padding-bottom: 10rpx;
- .radiusList {
- display: flex;
- flex-direction: row;
- align-items: center;
- .runType {
- font-size: 20rpx;
- line-height: 24rpx;
- color: #333;
- }
- .radiusItem {
- display: flex;
- flex-direction: row;
- align-items: center;
- margin-left: 10rpx;
- .radiusText {
- font-size: 20rpx;
- line-height: 24rpx;
- color: #333;
- }
- .radiusRadio {
- transform: scale(0.5);
- }
- }
- }
- .hisEmpty {
- display: flex;
- flex-direction: row;
- align-items: center;
- .hisEmptyIcon {
- width: 16rpx;
- height: 16rpx;
- }
- .hisEmptyText {
- font-size: 20rpx;
- margin-left: 5rpx;
- color: #ff2d55;
- }
- }
- .logList {
- // margin-right: 120rpx;
- display: flex;
- flex-direction: row;
- align-items: center;
- .hisText {
- font-size: 20rpx;
- color: #777;
- line-height: 24rpx;
- margin-right: 5rpx;
- }
- .unfold {
- width: 24rpx;
- height: 24rpx;
- }
- }
- }
- .code {
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: space-between;
- width: 710rpx;
- .codeInput {
- width: 590rpx;
- height: 100rpx;
- font-size: 20rpx;
- line-height: 28rpx;
- color: #333;
- padding: 10rpx;
- background-color: rgba(0, 0, 0, 0.03);
- border-radius: 15rpx;
- }
- .codeSend {
- width: 100rpx;
- height: 100rpx;
- border-radius: 15rpx;
- border: 1px solid #ff2d55;
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: center;
- .codeSendText {
- color: #ff2d55;
- font-size: 24rpx;
- font-weight: bold;
- }
- }
- .codeSend:active {
- background-color: rgba(0, 0, 0, 0.03);
- }
- }
- }
- .menuBtn {
- }
- </style>
|