Jelajahi Sumber

工序编辑暂存

xiaohaizhao 4 bulan lalu
induk
melakukan
61bede36e0

+ 4 - 4
App.vue

@@ -5,15 +5,15 @@ export default {
 		const { $Http } = getCurrentInstance().proxy;
 		if (wx.getStorageSync('userMsg').token) {
 			$Http.basic({
-				"classname": "common.adspace.adspace",
-				"method": "query_adspacelist", //查询轮播图
+				"classname": "webmanage.site.site",
+				"method": "querySite_Parameter", //查询站点数据
 				content: {
 					nocache: true
 				}
 			}).then(res => {
 				if (res.code == 1) {
-					uni.removeStorageSync('banner')
-					uni.setStorageSync('banner', res.data);
+					uni.removeStorageSync('siteP');
+					uni.setStorageSync("siteP", res.data)
 					let currentPages = getCurrentPages()[getCurrentPages().length - 1];
 					if (currentPages.route == 'pages/login/login') uni.redirectTo({
 						url: '/pages/index/index',

+ 4 - 7
components/My_upload/My_upload.vue

@@ -5,9 +5,6 @@
 
 <script setup>
 import { ref, reactive, defineProps, defineEmits, getCurrentInstance, onUnmounted } from 'vue'
-// 4. 删除文件 临时附件直接删除 绑定过的放到待删除列表中,保存时清空
-// 5. 上传和清空附件返回列表,和单个附件 用于表单校验
-
 const emit = defineEmits(['uploadCallback'])
 const props = defineProps({
     accept: {
@@ -143,6 +140,7 @@ const getArrayBuffer = (file) => {
 }
 
 // 上传文件到服务器
+
 const uploadFile = (res, data) => {
     uni.request({
         url: res.uploadurl,
@@ -209,8 +207,9 @@ const isUploading = (showToast = true) => {
 
 // 保存接口 接受数据调用handleFileLink
 const saveFileLinks = (ownertable, ownerid, usetype = 'default') => {
+    // 如果有待删除的文件,先删除
+    deleteList.length && deleteFile(deleteList);
     return new Promise((resolve, reject) => {
-        if (isUploading(false)) return resolve(false);
         const list = props.fileList;
         if (list.length) {
             return handleFileLink(list, ownertable, ownerid, usetype);
@@ -221,7 +220,6 @@ const saveFileLinks = (ownertable, ownerid, usetype = 'default') => {
 }
 
 function deletePic({ file, index, name }) {
-    console.log("index", index)
     uni.showModal({
         cancelText: '取消',
         confirmText: '删除',
@@ -271,7 +269,6 @@ const deleteFile = (arr) => {
             resolve(true)
         }
     })
-
 }
 
 // 清空临时文件 ownertable == 'temporary'
@@ -294,5 +291,5 @@ onUnmounted(() => {
     clearTemporaryFiles();
 })
 
-defineExpose({ isUploading, saveFileLinks, clearTemporaryFiles, handleFileLink })
+defineExpose({ isUploading, saveFileLinks })
 </script>

+ 3 - 0
pages.json

@@ -35,6 +35,9 @@
 			"style": {
 				"navigationBarTitleText": "选择产品"
 			}
+		},
+		{
+			"path": "pages/workOrder/work"
 		}
 	],
 	"globalStyle": {

+ 16 - 2
pages/login/login.vue

@@ -31,8 +31,8 @@
             </view>
         </view>
 
-        <up-modal negativeTop="100" asyncClose :show="showModal" confirmColor="#052E5D" showCancelButton confirmText="阅读并获取"
-            @confirm="onConfirm1" @cancel="showModal = false">
+        <up-modal negativeTop="100" asyncClose :show="showModal" confirmColor="#052E5D" showCancelButton
+            confirmText="阅读并获取" @confirm="onConfirm1" @cancel="showModal = false">
             <view class="modal-u">请阅读并同意<text style="color: #3874F6;" @click="checkTheAgreement">《隐私协议》</text></view>
         </up-modal>
 
@@ -181,6 +181,20 @@ function handleLogin(data) {
             uni.redirectTo({
                 url: '/pages/index/index',
             });
+
+            $Http.basic({
+                "classname": "webmanage.site.site",
+                "method": "querySite_Parameter", //查询站点数据
+                content: {
+                    nocache: true
+                }
+            }).then(res => {
+                if (res.code == 1) {
+                    uni.removeStorageSync('siteP');
+                    uni.setStorageSync("siteP", res.data)
+                }
+            })
+
         } else {
             uni.showToast({
                 title: res.msg,

+ 0 - 1
pages/workOrder/changeMsg.vue

@@ -141,7 +141,6 @@ let loading = ref(false);
 
 function save() {
     if (loading.value) return;
-    console.log("form", form);
     uFormRef.value.validate().then(valid => {
         if (valid) {
             let content = {

+ 97 - 45
pages/workOrder/detail.vue

@@ -53,54 +53,66 @@
             <view class="label">服务需求</view>
             <view class="value">{{ detail.remarks || '--' }}</view>
         </view>
-        <up-divider />
-        <view class="row" v-if="detail.enterprisename">
-            <view class="label justify">销售商</view>
-            <view class="value">{{ detail.enterprisename || '--' }}</view>
-        </view>
-        <view class="row" v-if="detail.itemsText.length">
-            <view class="label">产品信息</view>
-            <view class="value">
-                <view class="col-center" v-for="(item, index) in detail.itemsText" :key="index">
-                    <view class="value"><text v-if="detail.itemsText.length != 1">{{ index + 1 }}. </text>{{ item }}
+        <up-transition :show="transition">
+            <view class="transition">
+                <up-divider />
+                <view class="row" v-if="detail.enterprisename">
+                    <view class="label justify">销售商</view>
+                    <view class="value">{{ detail.enterprisename || '--' }}</view>
+                </view>
+                <view class="row" v-if="detail.itemsText.length">
+                    <view class="label">产品信息</view>
+                    <view class="value">
+                        <view class="col-center" v-for="(item, index) in detail.itemsText" :key="index">
+                            <view class="value"><text v-if="detail.itemsText.length != 1">{{ index + 1 }}. </text>{{
+                                item }}
+                            </view>
+                        </view>
                     </view>
                 </view>
-            </view>
-        </view>
-        <view class="row" v-if="detail.sku">
-            <view class="label justify">序列号</view>
-            <view class="value">{{ detail.sku || '--' }}</view>
-        </view>
-        <view class="row" v-if="detail.customername || detail.customerphonenumber" style="align-items: center;">
-            <view class="label justify">客户信息</view>
-            <view class="value phonenumber">{{ detail.customername || '' }}
-                <block v-if="detail.customerphonenumber">
-                    <text style="margin: 0 20rpx 0 10rpx;">
-                        {{ detail.customerphonenumber }}
-                    </text>
-                    <My-button :customStyle="{
-                        width: '142rpx',
-                        height: '48rpx',
-                        'background-color': '#FFFFFF',
-                        'color': '#3874F6',
-                        borderRadius: '10rpx'
-                    }" frontIcon="icon-bodadianhua1" text="电话" :phonenumber="detail.customerphonenumber" />
-                </block>
-            </view>
-        </view>
-        <view class="row" v-if="detail.servicetype !== '安装' && detail.cardno">
-            <view class="label">保修信息</view>
-            <view class="value">
-                <text :style="{ color: detail.inqualityguaranteeperiod ? '#70B603' : '#D9001B' }"
-                    style="margin-right: 0rpx;">
-                    {{ detail.inqualityguaranteeperiod ? '在保' : '已过保' }}
-                </text>
-                {{ detail.cardno || '' }}
-                <view v-if="detail.cardno" style="margin-top: 20rpx;">
-                    {{ item.begdate || '' }} - {{ item.enddate || '' }}
+                <view class="row" v-if="detail.sku">
+                    <view class="label justify">序列号</view>
+                    <view class="value">{{ detail.sku || '--' }}</view>
+                </view>
+                <view class="row" v-if="detail.customername || detail.customerphonenumber" style="align-items: center;">
+                    <view class="label justify">客户信息</view>
+                    <view class="value phonenumber">{{ detail.customername || '' }}
+                        <block v-if="detail.customerphonenumber">
+                            <text style="margin: 0 20rpx 0 10rpx;">
+                                {{ detail.customerphonenumber }}
+                            </text>
+                            <My-button :customStyle="{
+                                width: '142rpx',
+                                height: '48rpx',
+                                'background-color': '#FFFFFF',
+                                'color': '#3874F6',
+                                borderRadius: '10rpx'
+                            }" frontIcon="icon-bodadianhua1" text="电话" :phonenumber="detail.customerphonenumber" />
+                        </block>
+                    </view>
+                </view>
+                <view class="row" v-if="detail.servicetype !== '安装' && detail.cardno">
+                    <view class="label">保修信息</view>
+                    <view class="value">
+                        <text :style="{ color: detail.inqualityguaranteeperiod ? '#70B603' : '#D9001B' }"
+                            style="margin-right: 0rpx;">
+                            {{ detail.inqualityguaranteeperiod ? '在保' : '已过保' }}
+                        </text>
+                        {{ detail.cardno || '' }}
+                        <view v-if="detail.cardno" style="margin-top: 20rpx;">
+                            {{ item.begdate || '' }} - {{ item.enddate || '' }}
+                        </view>
+                    </view>
                 </view>
             </view>
-        </view>
+        </up-transition>
+        <block v-if="detail.status == '进行中'">
+            <view style="height: 40rpx;" />
+            <view class="changeTransition" hover-class="navigator-hover" @click="transition = !transition">
+                详细信息
+                <view class="iconfont icon-dianjizhankai" :class="transition ? 'shrink' : ''" />
+            </view>
+        </block>
         <!-- 底部按钮 -->
         <view v-if="detail.status == '待接单'" class="but-box">
             <view class="but-box-item" v-if="detail.customerphonenumber">
@@ -139,12 +151,24 @@
             </view>
         </view>
     </view>
+
+    <view class="main" v-if="detail.status == '进行中'" style="padding: 30rpx;">
+        <nodes ref="Nodes" :nodes="detail.nodes" />
+    </view>
+
+    <view style="height: 50px;" />
 </template>
 
 <script setup>
 import { ref, reactive, getCurrentInstance } from 'vue';
 const { $Http } = getCurrentInstance().proxy;
 import { onLoad, onShow } from '@dcloudio/uni-app';
+import nodes from './modules/nodes.vue';
+
+const transition = ref(true);
+
+const Nodes = ref(null);
+
 
 const current = ref(-1);
 const steps = reactive([
@@ -164,7 +188,8 @@ onShow(() => {
 })
 
 let detail = reactive({
-    itemsText: []
+    itemsText: [],
+    servicetype: ""
 });
 
 function getDetail() {
@@ -174,6 +199,7 @@ function getDetail() {
         res.data.itemsText = res.data.titems.map(item => {
             return `${item.itemname} ${item.model}`;
         })
+        if (res.data.status == '进行中' && detail.servicetype == '') transition.value = false;
         detail = reactive(res.data);
         current.value = steps.findIndex(item => item.value === res.data.status);
     })
@@ -245,6 +271,7 @@ function confirmStart() {
 
 <style lang="scss" scoped>
 .main {
+    position: relative;
     width: 690rpx;
     background: #FFFFFF;
     box-shadow: 0rpx 4rpx 16rpx 2rpx rgba(150, 157, 165, 0.16);
@@ -254,6 +281,31 @@ function confirmStart() {
     margin: 40rpx auto 0;
     overflow: hidden;
 
+    .changeTransition {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        color: #3874F6;
+        font-size: 28rpx;
+        position: absolute;
+        bottom: 0;
+        left: 0;
+        width: 100%;
+        height: 60rpx;
+        background: #EDF4FF;
+
+        .icon-dianjizhankai {
+            font-size: 20rpx;
+            margin-left: 16rpx;
+            transform: rotate(-90deg);
+            transition: transform 0.3s ease;
+        }
+
+        .shrink {
+            transform: rotate(90deg);
+        }
+    }
+
     .row {
         display: flex;
         font-size: 28rpx;

+ 93 - 0
pages/workOrder/modules/nodes.vue

@@ -0,0 +1,93 @@
+<template>
+    <view class="node" :class="prefix ? 'child' : ''"
+        :hover-class="!prefix && item.child.length ? '' : 'navigator-hover'" v-for="item in nodes"
+        :key="item.sa_workorder_nodeid" @click.stop="toWork(item)">
+        <view class="number">
+            {{ (prefix ? prefix + '-' : '') + item.rowindex }}.
+        </view>
+        <view style="flex: 1;">
+            <view class="label">
+                {{ item.workpresetjson.workname }}
+            </view>
+            <node v-if="!prefix && item.child.length" :nodes="item.child"
+                :prefix="(prefix ? prefix + '-' : '') + item.rowindex" />
+            <view v-else class="stuta">
+                <view class="tag" style="background-color: #E64D55;" v-if="item.status === '0'">未完成</view>
+            </view>
+        </view>
+    </view>
+</template>
+
+<script setup>
+import { getCurrentInstance } from 'vue';
+const { $Http } = getCurrentInstance().proxy;
+import { defineProps } from 'vue';
+import node from "./nodes.vue";
+
+const props = defineProps({
+    nodes: {
+        type: Array
+    },
+    prefix: {
+        type: [String, Number],
+    }
+});
+function toWork(item) {
+    try {
+        if (item.child.length) return;
+    } catch (error) {
+        item.child = [];
+    }
+    if (item.child.length) return;
+    item.title = (props.prefix ? props.prefix + '-' : '') + item.rowindex + '. ' + item.workpresetjson.workname;
+    $Http.data = item;
+
+    wx.navigateTo({
+        url: '/pages/workOrder/work',
+    })
+}
+</script>
+
+<style lang="scss" scoped>
+.node {
+    display: flex;
+    padding: 10rpx;
+    margin-top: 10rpx;
+    font-family: Microsoft YaHei, Microsoft YaHei;
+    border-radius: 8rpx;
+
+    .label,
+    .number {
+        font-size: 32rpx;
+    }
+
+    .number {
+        margin-right: 10rpx;
+    }
+
+    .stuta {
+        margin-top: 20rpx;
+        display: flex;
+
+        .tag {
+            border-radius: 8rpx;
+            padding: 8rpx 12rpx;
+            font-size: 24rpx;
+            color: #fff;
+        }
+    }
+}
+
+
+.child {
+    margin-left: -55rpx;
+    width: calc(100% + 65rpx);
+    transform: scale(0.9);
+
+    .label,
+    .number {
+        color: #333;
+    }
+
+}
+</style>

+ 276 - 0
pages/workOrder/work.vue

@@ -0,0 +1,276 @@
+<template>
+    <view class="content">
+        <up-form :model="form" labelWidth="70" ref="uFormRef">
+            <block v-if="workpresetjson.questionedit != 0 && workpresetjson.questionoption">
+                <up-form-item label="故障类型" prop="itemtype" :required="workpresetjson.questionedit == 11">
+                    <view class="options-box">
+                        <view class="option" :class="form.itemtype == item.value ? 'active' : ''"
+                            v-for="item in questionoption" :key="item.value"
+                            @click="clickRadio(item.value, 'itemtype')">
+                            {{ item.value }}
+                        </view>
+                    </view>
+                </up-form-item>
+                <up-form-item label="问题编辑" prop="questionedit" :required="workpresetjson.questionedit == 11">
+                    <up-textarea v-model="form.questionedit" placeholder="问题编辑" autoHeight height="20" />
+                </up-form-item>
+            </block>
+
+
+            <up-form-item v-if="workpresetjson.passcheck != 0" label="合格确认" prop="passcheck"
+                :required="workpresetjson.passcheck == 11">
+                <view class="options-box">
+                    <view class="option" :class="form.passcheck == item.value ? 'active' : ''" v-for="item in [
+                        { value: '正常' },
+                        { value: '异常' }]" :key="item.value" @click="clickRadio(item.value, 'passcheck')">
+                        {{ item.value }}
+                    </view>
+                </view>
+            </up-form-item>
+
+            <view v-if="workpresetjson.additem != 0">
+                <up-form-item label="是否更换配件" prop="additem" :required="workpresetjson.additem == 11">
+                    <view class="options-box">
+                        <view class="option" :class="form.additem == item.value ? 'active' : ''" v-for="item in [
+                            { value: '否' },
+                            { value: '是' }]" :key="item.value" @click="clickRadio(item.value, 'additem')">
+                            {{ item.value }}
+                        </view>
+                    </view>
+                </up-form-item>
+                <view v-if="form.additem == '是'">
+                    需要更换配件
+                </view>
+            </view>
+
+            <up-form-item v-if="workpresetjson.confirm != 0" label="确认信息" prop="confirm"
+                :required="workpresetjson.confirm == 11">
+                <view class="options-box">
+                    <view class="option" :class="form.confirm == item ? 'active' : ''"
+                        v-for="(item) in workpresetjson.confirm_options" :key="item"
+                        @click="clickRadio(item, 'confirm')">
+                        {{ item }}
+                    </view>
+                </view>
+            </up-form-item>
+
+            <up-form-item v-if="workpresetjson.amountpay != 0" label="费用支付" prop="amountpay"
+                :required="workpresetjson.amountpay == 11">
+                <up-input v-model="form.amountpay" type="number" placeholder="费用支付">
+                    <template #suffix>
+                        元
+                    </template>
+                </up-input>
+            </up-form-item>
+
+            <up-form-item v-if="workpresetjson.fileupload != 0" label="拍照" prop="fileupload"
+                :required="rules.fileupload[0].required">
+                <My_upload ref="upload" :fileList="data.attinfos" @uploadCallback="uploadCallback" />
+            </up-form-item>
+
+            <up-form-item v-if="workpresetjson.textedit != 0" label="文字说明" prop="textedit"
+                :required="rules.textedit[0].required">
+                <up-textarea v-model="form.textedit" placeholder="文字说明" autoHeight height="20" />
+            </up-form-item>
+
+        </up-form>
+
+        <view style="padding-bottom: 50px;width: 350rpx;margin: 40rpx auto 0;" @click="save">
+            <My-button text="保存" :loading="loading" />
+        </view>
+    </view>
+</template>
+
+<script setup>
+import { ref, reactive, getCurrentInstance } from 'vue';
+const { $Http } = getCurrentInstance().proxy;
+const uFormRef = ref(null);
+
+const upload = ref(null);
+
+import { onLoad } from '@dcloudio/uni-app';
+const form = reactive({
+    textedit: '', // 上传文本
+    confirm: "", // 确认信息
+    itemtype: "", // 故障类型
+    questionedit: "", // 问题编辑
+    additem: "", // 是否更换配件
+    passcheck: "", //合格确认 异常时 文字和图片必填
+    amountpay: "", // 费用支付
+    fileupload: "", // 上传图片
+});
+let data = {
+    attinfos: []
+};
+let workpresetjson = reactive({});
+
+let rules = reactive({
+    textedit: [
+        { required: false, message: '请输入说明', trigger: 'blur' }
+    ],
+    fileupload: [
+        { required: false, message: '请上传图片', trigger: 'change' }
+    ],
+});
+const questionoption = ref([]);
+
+onLoad(() => {
+    console.log("$Http.data", $Http.data)
+    data = reactive($Http.data);
+    delete $Http.data;
+
+    wx.setNavigationBarTitle({
+        title: data.title,
+    })
+
+    workpresetjson = Object.assign(workpresetjson, data.workpresetjson);
+
+    rules = Object.assign(rules, {
+        textedit: [
+            { required: workpresetjson.textedit == 11, message: '请输入说明', trigger: 'blur' },
+            { min: 2, max: 500, message: '长度在 2 到 500 个字符', trigger: 'blur' }
+        ],
+        confirm: [
+            { required: workpresetjson.confirm == 11, message: '请选择确认信息', trigger: 'change' }
+        ],
+        itemtype: [
+            { required: workpresetjson.questionedit == 11, message: '请选择故障类型', trigger: 'change' }
+        ],
+        questionedit: [
+            { required: workpresetjson.questionedit == 11, message: '请输入问题编辑', trigger: 'blur' },
+            { min: 2, max: 500, message: '长度在 2 到 500 个字符', trigger: 'blur' }
+        ],
+        additem: [
+            { required: workpresetjson.additem == 11, message: '请选择是否更换配件', trigger: 'change' }
+        ],
+        passcheck: [
+            { required: workpresetjson.passcheck == 11, message: '请选择合格确认', trigger: 'change' }
+        ],
+        amountpay: [
+            { required: workpresetjson.amountpay == 11, message: '请输入费用支付', trigger: 'blur' },
+            { pattern: /^\d+(\.\d{1,2})?$/, message: '请输入正确的金额', trigger: 'blur' }
+        ],
+        fileupload: [
+            { required: workpresetjson.fileupload == 11, message: '请上传图片', trigger: 'change' }
+        ],
+    })
+    setTimeout(() => {
+        uFormRef.value.setRules(rules);
+    });
+
+    if (workpresetjson.questionoption) $Http.getClass(workpresetjson.questionoption).then(res => {
+        questionoption.value = res.data;
+        if (res.code !== 1) return uni.showToast({ title: res.msg, icon: 'none' });
+    });
+});
+
+// 保存
+let loading = ref(false);
+
+function save() {
+    if (loading.value) return;
+    if (upload.value.isUploading()) return;
+    uFormRef.value.validate().then(valid => {
+        if (valid) {
+            console.log("data", data)
+            return console.log(form);
+            let content = {
+                "sa_workorderid": data.sa_workorderid,
+                "sa_workorder_nodeid": data.sa_workorder_nodeid,
+                ...form
+            };
+            loading.value = true;
+            $Http.basic({
+                "id": "20230208140003",
+                content
+            }).then(res => {
+                loading.value = false;
+                console.log("保存工单", res);
+                uni.showToast({ title: res.code !== 1 ? res.msg : "保存成功", icon: 'none', mask: res.code == 1 });
+                if (res.code == 1) setTimeout(() => {
+                    uni.navigateBack();
+                }, 500);
+            }).catch(err => {
+                loading.value = false;
+                console.error("保存工单失败", err);
+                uni.showToast({ title: '保存失败,请稍后重试', icon: 'none' });
+            });
+        }
+    })
+}
+
+function clickRadio(value, key) {
+    form[key] = form[key] == value ? "" : value;
+    if (key == 'passcheck') {
+        if (value == '异常') {
+            rules.textedit[0].required = true;
+            rules.fileupload[0].required = true;
+        } else {
+            rules.textedit[0].required = workpresetjson.textedit == 11;
+            rules.fileupload[0].required = workpresetjson.fileupload == 11;
+        }
+        uFormRef.value.setRules(rules);
+    }
+}
+
+function uploadCallback(list) {
+    console.log("上传回调", list);
+    form.fileupload = list.fileList.length ? '1' : '';
+    console.log("form", form)
+}
+</script>
+
+<style lang="scss" scoped>
+.content {
+    width: 100vw;
+    padding: 20px;
+    box-sizing: border-box;
+    min-height: 100vh;
+    background: #fff;
+
+
+    .picker {
+        width: 100%;
+        // border-bottom: 1px solid #dadbde;
+        font-size: 32rpx;
+        color: #606266;
+        padding: 9px;
+        border-radius: 8rpx;
+    }
+
+    .title {
+        font-size: 34rpx;
+        color: #4773EE;
+        margin: 20rpx 0;
+        font-weight: bold;
+    }
+
+    .options-box {
+        position: relative;
+        top: -6rpx;
+        display: flex;
+        flex-wrap: wrap;
+        width: 100%;
+        box-sizing: border-box;
+
+        .option {
+            border: 1px solid #dadbde;
+            border-radius: 8rpx;
+            padding: 10rpx 20rpx;
+            margin-right: 18rpx;
+            margin-top: 12rpx;
+            transition: background-color 0.3s, color 0.3s, border-color 0.3s;
+            text-align: center;
+            min-width: 80rpx;
+        }
+
+        .active {
+            background: #006EF7;
+            color: #fff;
+            border-color: #006EF7;
+        }
+    }
+
+
+}
+</style>

+ 7 - 3
static/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 4985326 */
-  src: url('//at.alicdn.com/t/c/font_4985326_dzcwlg84nhp.woff2?t=1753943776484') format('woff2'),
-       url('//at.alicdn.com/t/c/font_4985326_dzcwlg84nhp.woff?t=1753943776484') format('woff'),
-       url('//at.alicdn.com/t/c/font_4985326_dzcwlg84nhp.ttf?t=1753943776484') format('truetype');
+  src: url('//at.alicdn.com/t/c/font_4985326_41ua1apdsq9.woff2?t=1754295970513') format('woff2'),
+       url('//at.alicdn.com/t/c/font_4985326_41ua1apdsq9.woff?t=1754295970513') format('woff'),
+       url('//at.alicdn.com/t/c/font_4985326_41ua1apdsq9.ttf?t=1754295970513') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,10 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-dianjizhankai:before {
+  content: "\e70f";
+}
+
 .icon-bodadianhua1:before {
   content: "\e6f7";
 }