فهرست منبع

Merge branch 'cmy/develop-bi' into develop

chenmy 3 سال پیش
والد
کامیت
a2079724df

+ 1 - 1
TEAMModelBI/ClientApp/public/index.html

@@ -11,7 +11,7 @@
     </title>
 </head>
 <script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
-<script src="https://at.alicdn.com/t/font_2934132_xd5xs04ekk.js"></script>
+<script src="https://at.alicdn.com/t/font_2934132_6ijxqwuahzj.js"></script>
 
 <body>
     <noscript>

BIN
TEAMModelBI/ClientApp/src/assets/img/school-bg-1.png


BIN
TEAMModelBI/ClientApp/src/assets/img/school-bg-2.png


BIN
TEAMModelBI/ClientApp/src/assets/img/school-bg-3.png


+ 1 - 1
TEAMModelBI/ClientApp/src/until/http.js

@@ -15,7 +15,7 @@ axios.interceptors.request.use(
             config.url.indexOf('tabledd') != -1 || config.url.indexOf('schoolroom') != -1 || config.url.indexOf('syscfg') != -1 || config.url.indexOf('biservers') != -1) {
             config.headers = {
                 'Content-Type': 'application/json',
-                'x-auth-authtoken': JSON.parse(localStorage.id_token)
+                'x-auth-authtoken': JSON.parse(localStorage.id_token),
             }
         } else {
             config.headers = {

+ 211 - 211
TEAMModelBI/ClientApp/src/view/bindPhone.vue

@@ -1,35 +1,35 @@
 <template>
-    <el-dialog v-model="centerDialogVisible" :title="$t(`bind.title`)" width="30%" center :close-on-click-modal="false" :close-on-press-escape="false">
-        <div class="bindbox">
-            <div class="bind-phone">
-                <el-input v-model="phoneData.to" :placeholder="$t(`bind.phoneHint`)" class="input-with-select">
-                    <template #prepend>
-                        <el-select v-model="select" :placeholder="$t(`bind.areaNum`)" style="width: 90px">
-                            <el-option label="86" value="1" />
-                            <el-option label="886" value="2" />
-                        </el-select>
-                    </template>
-                </el-input>
-            </div>
-            <div class="bind-code">
-                <div class="codenum">
-                    <el-row :gutter="20">
-                        <el-input v-model="phonenum.code" placeholder="" />
-                    </el-row>
-                </div>
-                <div class="sendcode">
-                    <el-button type="primary" v-show="showCode.status" @click="getCode()">{{$t(`bind.codes`)}}</el-button>
-                    <el-button type="primary" disabled v-show="showCode.status ==false">{{showCode.count}}秒</el-button>
-                </div>
-            </div>
+  <el-dialog v-model="centerDialogVisible" :title="$t(`bind.title`)" width="30%" center :close-on-click-modal="false" :close-on-press-escape="false">
+    <div class="bindbox">
+      <div class="bind-phone">
+        <el-input v-model="phoneData.to" :placeholder="$t(`bind.phoneHint`)" class="input-with-select">
+          <template #prepend>
+            <el-select v-model="select" :placeholder="$t(`bind.areaNum`)" style="width: 90px">
+              <el-option label="86" value="1" />
+              <el-option label="886" value="2" />
+            </el-select>
+          </template>
+        </el-input>
+      </div>
+      <div class="bind-code">
+        <div class="codenum">
+          <el-row :gutter="20">
+            <el-input v-model="phonenum.code" placeholder="" />
+          </el-row>
         </div>
-        <template #footer>
-            <span class="dialog-footer">
-                <el-button type="primary" @click="bindUser(proxy)">{{$t(`bind.binds`)}}</el-button>
-                <el-button @click="close">取消</el-button>
-            </span>
-        </template>
-    </el-dialog>
+        <div class="sendcode">
+          <el-button type="primary" v-show="showCode.status" @click="getCode()">{{$t(`bind.codes`)}}</el-button>
+          <el-button type="primary" disabled v-show="showCode.status ==false">{{showCode.count}}秒</el-button>
+        </div>
+      </div>
+    </div>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button type="primary" @click="bindUser(proxy)">{{$t(`bind.binds`)}}</el-button>
+        <el-button @click="close">取消</el-button>
+      </span>
+    </template>
+  </el-dialog>
 </template>
 <script>
 import { reactive, ref, getCurrentInstance, watch } from 'vue'
@@ -38,209 +38,209 @@ import { ElMessage } from 'element-plus'
 import { useRouter } from 'vue-router'
 import { useStore } from 'vuex'
 export default {
-    props: {
-        callbackStatus: {
-            type: Object,
-            default: () => {},
-        },
-    },
-    setup(props, content) {
-        console.log(props.callbackStatus, '8888888888888')
-        let { proxy } = getCurrentInstance()
-        let store = useStore()
-        console.log(store.state.binDingstatus)
-        let centerDialogVisible = ref(true)
-        let phonenum = reactive({
-            phone: '',
-            code: '',
-            partitionKey: '',
-            rowKey: '',
-        })
-        //验证冷却
-        let showCode = reactive({
-            status: true,
-            count: '',
-            timer: null,
-        })
-        var phoneData = ref({
-            to: phonenum.phone,
-            lang: 'zh-cn',
-            country: '86',
-        })
-        let phoneName = ref('')
-        var { phoneCode } = pin(proxy)
-        let select = ref('')
-        phonenum.phone = props.callbackStatus.phoneNum
-        phonenum.partitionKey = props.callbackStatus.partitionKey
-        phonenum.rowKey = props.callbackStatus.rowKey
-        //绑定信息
-        phoneData.value.to = props.callbackStatus.phoneNum
-        phoneData.value.country = props.callbackStatus.country
-        phoneData.value.lang = props.callbackStatus.country === '86' || props.callbackStatus.country === null ? 'zh-CN' : 'zh-TW'
-        select = props.callbackStatus.country == '86' || props.callbackStatus.country === null ? '1' : '2'
-        phoneName = props.callbackStatus.name
-        //路由
-        const router = useRouter()
-        //关闭弹窗
-        function close() {
-            centerDialogVisible.value = false
-            store.commit('BindStatus', false)
-        }
-        //监听状态值
-        watch(
-            () => store.state.binDingstatus,
-            (a) => {
-                store.state.binDingstatus = a
-                centerDialogVisible.value = a
-            }
-        )
-        //验证码冷却及发送验证码
-        function getCode() {
-            //验证码冷却部分
-            const TIME_COUNT = 60
-            if (!showCode.timer) {
-                showCode.count = TIME_COUNT
-                showCode.status = false
-                showCode.timer = setInterval(() => {
-                    if (showCode.count > 0 && showCode.count <= TIME_COUNT) {
-                        showCode.count--
-                    } else {
-                        showCode.status = true
-                        clearInterval(showCode.timer)
-                        showCode.timer = null
-                    }
-                }, 1000)
-            }
-            //请求接口
-            phoneCode(phoneData)
-        }
-        //手机号码绑定流程
-        function bindUser(proxy) {
-            let countryPhone = '+' + phoneData.value.country + '-' + phoneData.value.to
-            let randNum = proxy.$access.rand(1000, 9999).toString()
-            console.log(randNum, '随机数')
-            let data = {
-                grant_type: 'create',
-                client_id: '73266ca3-62b1-4304-b837-c672a8c88001',
-                account: countryPhone,
-                name: phoneName,
-                pin_code: phonenum.code,
-                nonce: randNum,
-            }
-            //验证手机号和验证码
-            proxy.$api.verifyCode(data).then((res) => {
-                console.log(res, '验证手机号和验证码')
-                let data
-                if (res.hasOwnProperty('error') && res.error === 3) {
-                    ElMessage.error(proxy.$t(`bind.codeError`))
-                    return
-                }
-                res.hasOwnProperty('error') && res.error === 2 ? (data = { mobile: phoneData.value.to, partitionKey: phonenum.partitionKey, rowKey: phonenum.rowKey }) : ''
-                res.hasOwnProperty('id_token') && res.id_token ? (data = { id_token: res.id_token, loginData: res, partitionKey: phonenum.partitionKey, rowKey: phonenum.rowKey }) : ''
-                bindId(data, proxy)
-            })
-        }
-        //绑定操作
-        function bindId(paramData, proxy) {
-            proxy.$api.bindUserid(paramData).then((res) => {
-                console.log(res, '返回的结果')
-                let blobInfos = { osblob_uri: res.osblob_uri, osblob_sas: res.osblob_sas }
-                res.state === 200
-                    ? (ElMessage.success(proxy.$t(`bind.bindSuccess`)),
-                      localStorage.setItem('userData', JSON.stringify(res.ddUserInfos[0])),
-                      localStorage.setItem('id_token', JSON.stringify(res.id_token)),
-                      localStorage.setItem('blobInfo', JSON.stringify(blobInfos)),
-                      getOrganization(),
-                      Allpermission(),
-                      router.push({ path: '/dashboard' }))
-                    : res.state === 400
-                    ? ElMessage.error(proxy.$t(`commonMsg.parameterError`))
-                    : res.state === 404
-                    ? ElMessage.error(proxy.$t(`bind.notFounddatas`))
-                    : ''
-            })
-        }
-        //获取组织架构
-        function getOrganization() {
-            console.log(proxy, '检查proxy')
-            proxy.$api.getorganization().then((res) => {
-                console.log(res, '组织架构返回的内容')
-                res.state === 200 ? (store.commit('ChangOrganization', res.deptlist), localStorage.setItem('organization', JSON.stringify(res.deptlist))) : ''
-            })
-        }
-        //获取所有权限表
-        function Allpermission() {
-            proxy.$api.getAllpermission().then((res) => {
-                console.log(res, '权限列表')
-                res.authorityBIList ? (store.commit('getPermission', res.authorityBIList), localStorage.setItem('management', JSON.stringify(res.authorityBIList))) : []
-            })
-        }
-        return {
-            store,
-            proxy,
-            centerDialogVisible,
-            phonenum,
-            showCode,
-            getCode,
-            phoneCode,
-            phoneData,
-            bindUser,
-            bindId,
-            close,
-            getOrganization,
-            Allpermission,
-            select,
-            phoneName,
-        }
+  props: {
+    callbackStatus: {
+      type: Object,
+      default: () => { },
     },
-}
-//发送验证码API
-function pin(proxy) {
-    let phoneCode = (datas) => {
-        console.log(datas, '验证码准备发送的参数')
-        let parameter = {
-            to: datas.value.to,
-            lang: datas.value.lang,
-            country: datas.value.country,
+  },
+  setup (props, content) {
+    console.log(props.callbackStatus, '8888888888888')
+    let { proxy } = getCurrentInstance()
+    let store = useStore()
+    console.log(store.state.binDingstatus)
+    let centerDialogVisible = ref(true)
+    let phonenum = reactive({
+      phone: '',
+      code: '',
+      partitionKey: '',
+      rowKey: '',
+    })
+    //验证冷却
+    let showCode = reactive({
+      status: true,
+      count: '',
+      timer: null,
+    })
+    var phoneData = ref({
+      to: phonenum.phone,
+      lang: 'zh-cn',
+      country: '86',
+    })
+    let phoneName = ref('')
+    var { phoneCode } = pin(proxy)
+    let select = ref('')
+    phonenum.phone = props.callbackStatus.phoneNum
+    phonenum.partitionKey = props.callbackStatus.partitionKey
+    phonenum.rowKey = props.callbackStatus.rowKey
+    //绑定信息
+    phoneData.value.to = props.callbackStatus.phoneNum
+    phoneData.value.country = props.callbackStatus.country
+    phoneData.value.lang = props.callbackStatus.country === '86' || props.callbackStatus.country === null ? 'zh-CN' : 'zh-TW'
+    select = props.callbackStatus.country == '86' || props.callbackStatus.country === null ? '1' : '2'
+    phoneName = props.callbackStatus.name
+    //路由
+    const router = useRouter()
+    //关闭弹窗
+    function close () {
+      centerDialogVisible.value = false
+      store.commit('BindStatus', false)
+    }
+    //监听状态值
+    watch(
+      () => store.state.binDingstatus,
+      (a) => {
+        store.state.binDingstatus = a
+        centerDialogVisible.value = a
+      }
+    )
+    //验证码冷却及发送验证码
+    function getCode () {
+      //验证码冷却部分
+      const TIME_COUNT = 60
+      if (!showCode.timer) {
+        showCode.count = TIME_COUNT
+        showCode.status = false
+        showCode.timer = setInterval(() => {
+          if (showCode.count > 0 && showCode.count <= TIME_COUNT) {
+            showCode.count--
+          } else {
+            showCode.status = true
+            clearInterval(showCode.timer)
+            showCode.timer = null
+          }
+        }, 1000)
+      }
+      //请求接口
+      phoneCode(phoneData)
+    }
+    //手机号码绑定流程
+    function bindUser (proxy) {
+      let countryPhone = '+' + phoneData.value.country + '-' + phoneData.value.to
+      let randNum = proxy.$access.rand(1000, 9999).toString()
+      console.log(randNum, '随机数')
+      let data = {
+        grant_type: 'create',
+        client_id: '73266ca3-62b1-4304-b837-c672a8c88001',
+        account: countryPhone,
+        name: phoneName,
+        pin_code: phonenum.code,
+        nonce: randNum,
+      }
+      //验证手机号和验证码
+      proxy.$api.verifyCode(data).then((res) => {
+        console.log(res, '验证手机号和验证码')
+        let data
+        if (res.hasOwnProperty('error') && res.error === 3) {
+          ElMessage.error(proxy.$t(`bind.codeError`))
+          return
         }
-        let { codesInfo } = proxy.$api.Phonepin(parameter).then((res) => {
-            console.log(res, '接口返回')
-            ElMessage.success('发送成功!')
-        })
+        res.hasOwnProperty('error') && res.error === 2 ? (data = { mobile: phoneData.value.to, partitionKey: phonenum.partitionKey, rowKey: phonenum.rowKey }) : ''
+        res.hasOwnProperty('id_token') && res.id_token ? (data = { id_token: res.id_token, loginData: res, partitionKey: phonenum.partitionKey, rowKey: phonenum.rowKey }) : ''
+        bindId(data, proxy)
+      })
+    }
+    //绑定操作
+    function bindId (paramData, proxy) {
+      proxy.$api.bindUserid(paramData).then((res) => {
+        console.log(res, '返回的结果')
+        let blobInfos = { osblob_uri: res.osblob_uri, osblob_sas: res.osblob_sas }
+        res.state === 200
+          ? (ElMessage.success(proxy.$t(`bind.bindSuccess`)),
+            localStorage.setItem('userData', JSON.stringify(res.ddUserInfos[0])),
+            localStorage.setItem('id_token', JSON.stringify(res.id_token)),
+            localStorage.setItem('blobInfo', JSON.stringify(blobInfos)),
+            getOrganization(),
+            Allpermission(),
+            router.push({ path: '/dashboard' }))
+          : res.state === 400
+            ? ElMessage.error(proxy.$t(`commonMsg.parameterError`))
+            : res.state === 404
+              ? ElMessage.error(proxy.$t(`bind.notFounddatas`))
+              : ''
+      })
+    }
+    //获取组织架构
+    function getOrganization () {
+      console.log(proxy, '检查proxy')
+      proxy.$api.getorganization().then((res) => {
+        console.log(res, '组织架构返回的内容')
+        res.state === 200 ? (store.commit('ChangOrganization', res.deptlist), localStorage.setItem('organization', JSON.stringify(res.deptlist))) : ''
+      })
+    }
+    //获取所有权限表
+    function Allpermission () {
+      proxy.$api.getAllpermission().then((res) => {
+        console.log(res, '权限列表')
+        res.authorityBIList ? (store.commit('getPermission', res.authorityBIList), localStorage.setItem('management', JSON.stringify(res.authorityBIList))) : []
+      })
     }
     return {
-        phoneCode,
+      store,
+      proxy,
+      centerDialogVisible,
+      phonenum,
+      showCode,
+      getCode,
+      phoneCode,
+      phoneData,
+      bindUser,
+      bindId,
+      close,
+      getOrganization,
+      Allpermission,
+      select,
+      phoneName,
+    }
+  },
+}
+//发送验证码API
+function pin (proxy) {
+  let phoneCode = (datas) => {
+    console.log(datas, '验证码准备发送的参数')
+    let parameter = {
+      to: datas.value.to,
+      lang: datas.value.lang,
+      country: datas.value.country,
     }
+    let { codesInfo } = proxy.$api.Phonepin(parameter).then((res) => {
+      console.log(res, '接口返回')
+      ElMessage.success('发送成功!')
+    })
+  }
+  return {
+    phoneCode,
+  }
 }
 </script>
 <style scoped>
 .bindbox {
-    width: 55%;
-    height: auto;
-    margin: 0 auto;
+  width: 55%;
+  height: auto;
+  margin: 0 auto;
 }
 .bind-code {
-    margin: 10% 0% 20% 0%;
+  margin: 10% 0% 20% 0%;
 }
 .codenum {
-    float: left;
-    font-size: 18px;
-    width: 60%;
+  float: left;
+  font-size: 18px;
+  width: 60%;
 }
 .sendcode {
-    float: left;
-    width: 33%;
-    margin-left: 7%;
+  float: left;
+  width: 33%;
+  margin-left: 7%;
 }
 </style>
 <style>
 .sendcode button span {
-    font-size: 14px;
+  font-size: 14px;
 }
 .bind-phone .el-select .el-input__inner {
-    padding-right: 20px;
+  padding-right: 20px;
 }
 .bind-code .el-row {
-    margin-left: 0px !important;
+  margin-left: 0px !important;
 }
 </style>

+ 100 - 100
TEAMModelBI/ClientApp/src/view/ddlogin.vue

@@ -1,119 +1,119 @@
 <template>
-    <div style="width:100%">
-        <div id="login_container" style="margin-bottom:5%;"></div>
-    </div>
+  <div style="width:100%">
+    <div id="login_container" style="margin-bottom:5%;"></div>
+  </div>
 </template>
  
 <script>
 const hosts = window.location.host === 'localhost:5001' ? 'localhost:5001' : 'bitest.teammodel.cn'
 import axios from 'axios'
 export default {
-    name: 'App',
-    components: {},
-    data() {
-        return {
-            appid: 'dingrucgsnt8p13rfbgd',
-            redirectUrl: 'https://' + hosts + '/login',
-            // apiUrl: '/common/login/DingLogin',
-            dingCodeConfig: {
-                id: 'login_container',
-                style: 'background-color:#FFFFFF;',
-                width: '300',
-                height: '350',
-            },
-        }
+  name: 'App',
+  components: {},
+  data () {
+    return {
+      appid: 'dingrucgsnt8p13rfbgd',
+      redirectUrl: 'https://' + hosts + '/login',
+      // apiUrl: '/common/login/DingLogin',
+      dingCodeConfig: {
+        id: 'login_container',
+        style: 'background-color:#FFFFFF;',
+        width: '300',
+        height: '350',
+      },
+    }
+  },
+  computed: {
+    getRedirectUrl () {
+      return encodeURIComponent(this.redirectUrl)
+    },
+    getAuthUrl () {
+      return `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${this.appid}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${this.getRedirectUrl}`
     },
-    computed: {
-        getRedirectUrl() {
-            return encodeURIComponent(this.redirectUrl)
-        },
-        getAuthUrl() {
-            return `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${this.appid}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${this.getRedirectUrl}`
-        },
-        getGoto() {
-            return encodeURIComponent(this.getAuthUrl)
-        },
-        getDingCodeConfig() {
-            return { ...this.dingCodeConfig, goto: this.getGoto }
-        },
+    getGoto () {
+      return encodeURIComponent(this.getAuthUrl)
     },
-    created() {
-        this.initDingJs()
+    getDingCodeConfig () {
+      return { ...this.dingCodeConfig, goto: this.getGoto }
     },
-    mounted() {
-        this.addDingListener()
-        this.initDingLogin()
-        this.getUser()
+  },
+  created () {
+    this.initDingJs()
+  },
+  mounted () {
+    this.addDingListener()
+    this.initDingLogin()
+    this.getUser()
+  },
+  methods: {
+    initDingJs () {
+      console.log('触发方法')
+      !(function (window, document) {
+        function d (a) {
+          var e,
+            c = document.createElement('iframe'),
+            d = 'https://login.dingtalk.com/login/qrcode.htm?goto=' + a.goto
+            ; (d += a.style ? '&style=' + encodeURIComponent(a.style) : ''),
+              (d += a.href ? '&href=' + a.href : ''),
+              (c.src = d),
+              (c.frameBorder = '0'),
+              (c.allowTransparency = 'true'),
+              (c.scrolling = 'no'),
+              (c.width = a.width ? a.width + 'px' : '365px'),
+              (c.height = a.height ? a.height + 'px' : '400px'),
+              (e = document.getElementById(a.id)),
+              (e.innerHTML = ''),
+              e.appendChild(c)
+        }
+        console.log(d)
+        window.DDLogin = d
+      })(window, document)
     },
-    methods: {
-        initDingJs() {
-            console.log('触发方法')
-            !(function (window, document) {
-                function d(a) {
-                    var e,
-                        c = document.createElement('iframe'),
-                        d = 'https://login.dingtalk.com/login/qrcode.htm?goto=' + a.goto
-                    ;(d += a.style ? '&style=' + encodeURIComponent(a.style) : ''),
-                        (d += a.href ? '&href=' + a.href : ''),
-                        (c.src = d),
-                        (c.frameBorder = '0'),
-                        (c.allowTransparency = 'true'),
-                        (c.scrolling = 'no'),
-                        (c.width = a.width ? a.width + 'px' : '365px'),
-                        (c.height = a.height ? a.height + 'px' : '400px'),
-                        (e = document.getElementById(a.id)),
-                        (e.innerHTML = ''),
-                        e.appendChild(c)
-                }
-                console.log(d)
-                window.DDLogin = d
-            })(window, document)
-        },
-        addDingListener() {
-            let self = this
+    addDingListener () {
+      let self = this
 
-            let handleLoginTmpCode = function (loginTmpCode) {
-                window.location.href = self.getAuthUrl + `&loginTmpCode=${loginTmpCode}`
-            }
+      let handleLoginTmpCode = function (loginTmpCode) {
+        window.location.href = self.getAuthUrl + `&loginTmpCode=${loginTmpCode}`
+      }
 
-            let handleMessage = function (event) {
-                if (event.origin == 'https://login.dingtalk.com') {
-                    handleLoginTmpCode(event.data)
-                }
-            }
+      let handleMessage = function (event) {
+        if (event.origin == 'https://login.dingtalk.com') {
+          handleLoginTmpCode(event.data)
+        }
+      }
 
-            if (typeof window.addEventListener != 'undefined') {
-                window.addEventListener('message', handleMessage, false)
-            } else if (typeof window.attachEvent != 'undefined') {
-                window.attachEvent('onmessage', handleMessage)
-            }
-        },
-        initDingLogin() {
-            window.DDLogin(this.getDingCodeConfig)
-        },
-        getUser() {
-            let getQueryString = function (name) {
-                var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
-                var r = window.location.search.substr(1).match(reg)
-                if (r != null) {
-                    return unescape(r[2])
-                }
-                return null
-            }
+      if (typeof window.addEventListener != 'undefined') {
+        window.addEventListener('message', handleMessage, false)
+      } else if (typeof window.attachEvent != 'undefined') {
+        window.attachEvent('onmessage', handleMessage)
+      }
+    },
+    initDingLogin () {
+      window.DDLogin(this.getDingCodeConfig)
+    },
+    getUser () {
+      let getQueryString = function (name) {
+        var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
+        var r = window.location.search.substr(1).match(reg)
+        if (r != null) {
+          return unescape(r[2])
+        }
+        return null
+      }
 
-            let code = getQueryString('code')
+      let code = getQueryString('code')
 
-            if (code !== null) {
-                axios
-                    .get(`${this.apiUrl}?code=${code}`)
-                    .then((response) => {
-                        console.log(response)
-                    })
-                    .catch((error) => {
-                        console.log(error)
-                    })
-            }
-        },
+      if (code !== null) {
+        axios
+          .get(`${this.apiUrl}?code=${code}`)
+          .then((response) => {
+            console.log(response)
+          })
+          .catch((error) => {
+            console.log(error)
+          })
+      }
     },
+  },
 }
 </script>

+ 1 - 1
TEAMModelBI/ClientApp/src/view/index/index.vue

@@ -1629,7 +1629,7 @@ export default {
               console.log(res, '处理过后的时间')
               for (let i in replaceTime) {
                 let nums = parseInt(i) + 1
-                replaceTime[i].value == onlineData[onlineData.length - 1].key ? replaceTime.splice(nums) : ''
+                replaceTime[i].value == hoursInfo ? replaceTime.splice(nums) : ''
               }
               //在线人数趋势
               onlineData.forEach((x) => {

+ 247 - 247
TEAMModelBI/ClientApp/src/view/login.vue

@@ -1,8 +1,8 @@
 <template>
-    <div class="backgorundbox">
-        <div class="loginbox">
-            <div class="logintitle">{{ $t(`login.title`) }}</div>
-            <!-- <div class="usrpwd" v-if="loginModel">
+  <div class="backgorundbox">
+    <div class="loginbox">
+      <div class="logintitle">{{ $t(`login.title`) }}</div>
+      <!-- <div class="usrpwd" v-if="loginModel">
                 <div class='userbox' style="margin-bottom:10%">
                     <el-input v-model="user" placeholder="醍摩豆ID/手机号码" prefix-icon="el-icon-user" />
                 </div>
@@ -15,10 +15,10 @@
                     <div class="ddlogin" @click="loginModel=false"><img src="../assets/img/ddlogin.png"></div>
                 </div>
             </div> -->
-            <div class="usrpwd">
-                <ddlogin></ddlogin>
-            </div>
-            <!-- <div class="cut" @click="loginModel = !loginModel">
+      <div class="usrpwd">
+        <ddlogin></ddlogin>
+      </div>
+      <!-- <div class="cut" @click="loginModel = !loginModel">
                 <svg width="52" height="52" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" style="border-top-right-radius:10px">
                     <mask id="id-3757926926-a" width="52" height="52" x="0" y="0" maskUnits="userSpaceOnUse">
                         <path fill="#fff" d="M0 0l52 52V0H0z"></path>
@@ -35,12 +35,12 @@
                     </defs>
                 </svg>
             </div> -->
-        </div>
-        <!-- <div id="login_container" style="transform: scale(.8);">123456</div> -->
-        <!--绑定弹窗-->
-        <!-- <bind :callbackStatus=callbackStatus v-if="callbackStatus.state ===201" ref="comRef"></bind> -->
-        <!--绑定弹窗end-->
     </div>
+    <!-- <div id="login_container" style="transform: scale(.8);">123456</div> -->
+    <!--绑定弹窗-->
+    <!-- <bind :callbackStatus=callbackStatus v-if="callbackStatus.state ===201" ref="comRef"></bind> -->
+    <!--绑定弹窗end-->
+  </div>
 </template>
 <script>
 import { ref, watch, onMounted, getCurrentInstance, toRef, reactive } from 'vue'
@@ -51,293 +51,293 @@ import { useRouter } from 'vue-router'
 import { useStore } from 'vuex'
 import jwt_decode from 'jwt-decode'
 export default {
-    components: {
-        ddlogin,
-        bind,
-    },
-    setup() {
-        var types = navigator.language
-        localStorage.setItem('language', JSON.stringify(types))
-        let user = ref('')
-        let pwd = ref('')
-        let loginModel = ref(true)
-        let loginImg = ref(require('../assets/img/erweima.png'))
-        var userCode = ''
-        let callbackStatus = ref({
-            state: '',
-            phoneNum: '',
-            partitionKey: '',
-            rowKey: '',
-            country: '',
-            name: '',
+  components: {
+    ddlogin,
+    bind,
+  },
+  setup () {
+    var types = navigator.language
+    localStorage.setItem('language', JSON.stringify(types))
+    let user = ref('')
+    let pwd = ref('')
+    let loginModel = ref(true)
+    let loginImg = ref(require('../assets/img/erweima.png'))
+    var userCode = ''
+    let callbackStatus = ref({
+      state: '',
+      phoneNum: '',
+      partitionKey: '',
+      rowKey: '',
+      country: '',
+      name: '',
+    })
+    let router = useRouter()
+    let { proxy } = getCurrentInstance()
+    const store = useStore()
+    console.log(store, 'VUEX')
+    let comRef = ref(null)
+    let loading = reactive({
+      lock: '',
+      text: '',
+      background: '',
+    })
+    let loadings = ref(true)
+    let msgText = ref('钉钉扫码登录')
+    onMounted(() => {
+      if (window.location.href.indexOf('?code') != -1) {
+        userCode = window.location.href.substring(window.location.href.indexOf('?') + 6, window.location.href.indexOf('&state'))
+        console.log(userCode)
+        editState(userCode)
+      }
+      localStorage.setItem('Host', JSON.stringify(window.location.host))
+    })
+    //处理登录icon变化
+    watch(loginModel, () => {
+      loginModel.value == true
+        ? ((loginImg.value = require('../assets/img/erweima.png')), (msgText.value = '钉钉账号登录'))
+        : ((loginImg.value = require('../assets/img/mima.png')), (msgText.value = '钉钉扫码登录'))
+    })
+    let { editState } = test(proxy)
+    function test (proxy) {
+      let editState = (res) => {
+        loading = ElLoading.service({
+          lock: true,
+          text: proxy.$t(`login.logining`),
+          background: 'rgba(0, 0, 0, 0.7)',
         })
-        let router = useRouter()
-        let { proxy } = getCurrentInstance()
-        const store = useStore()
-        console.log(store, 'VUEX')
-        let comRef = ref(null)
-        let loading = reactive({
-            lock: '',
-            text: '',
-            background: '',
+        let datas = { code: res }
+        proxy.$api.Dinglogin(datas).then((res) => {
+          console.log(res, '接口访问成功')
+          callbackStatus.value.state = res.state
+          callbackStatus.value.partitionKey = res.ddUserInfos[0].partitionKey
+          callbackStatus.value.rowKey = res.ddUserInfos[0].rowKey
+          // res.state === 201
+          //     ? (store.commit('BindStatus', true),
+          //       loading.close(),
+          //       (callbackStatus.value.country = res.ddUserInfos[0].stateCode),
+          //       (callbackStatus.value.name = res.ddUserInfos[0].name),
+          //       (callbackStatus.value.phoneNum = res.ddUserInfos[0].mobile))
+          //     : res.state === 200
+          //     ? (loading.close(), loginSuccess(res), ElMessage.success(proxy.$t(`login.loginSuccess`)))
+          //     : (loading.close(), ElMessage.error(res.message))
+          res.state === 200 ? ElMessage.success(proxy.$t(`login.loginSuccess`), loginSuccess(res)) : res.state === 0 ? ElMessage.error(res.msg) : ElMessage.error('登录失败')
+          loading.close()
         })
-        let loadings = ref(true)
-        let msgText = ref('钉钉扫码登录')
-        onMounted(() => {
-            if (window.location.href.indexOf('?code') != -1) {
-                userCode = window.location.href.substring(window.location.href.indexOf('?') + 6, window.location.href.indexOf('&state'))
-                console.log(userCode)
-                editState(userCode)
-            }
-            localStorage.setItem('Host', JSON.stringify(window.location.host))
-        })
-        //处理登录icon变化
-        watch(loginModel, () => {
-            loginModel.value == true
-                ? ((loginImg.value = require('../assets/img/erweima.png')), (msgText.value = '钉钉账号登录'))
-                : ((loginImg.value = require('../assets/img/mima.png')), (msgText.value = '钉钉扫码登录'))
-        })
-        let { editState } = test(proxy)
-        function test(proxy) {
-            let editState = (res) => {
-                loading = ElLoading.service({
-                    lock: true,
-                    text: proxy.$t(`login.logining`),
-                    background: 'rgba(0, 0, 0, 0.7)',
-                })
-                let datas = { code: res }
-                proxy.$api.Dinglogin(datas).then((res) => {
-                    console.log(res, '接口访问成功')
-                    callbackStatus.value.state = res.state
-                    callbackStatus.value.partitionKey = res.ddUserInfos[0].partitionKey
-                    callbackStatus.value.rowKey = res.ddUserInfos[0].rowKey
-                    // res.state === 201
-                    //     ? (store.commit('BindStatus', true),
-                    //       loading.close(),
-                    //       (callbackStatus.value.country = res.ddUserInfos[0].stateCode),
-                    //       (callbackStatus.value.name = res.ddUserInfos[0].name),
-                    //       (callbackStatus.value.phoneNum = res.ddUserInfos[0].mobile))
-                    //     : res.state === 200
-                    //     ? (loading.close(), loginSuccess(res), ElMessage.success(proxy.$t(`login.loginSuccess`)))
-                    //     : (loading.close(), ElMessage.error(res.message))
-                    res.state === 200 ? ElMessage.success(proxy.$t(`login.loginSuccess`), loginSuccess(res)) : res.state === 0 ? ElMessage.error(res.msg) : ElMessage.error('登录失败')
-                    loading.close()
-                })
-            }
-            return {
-                editState,
-            }
-        }
-        //登录成功后执行的数据保存本地
-        function loginSuccess(res) {
-            if (res.state === 200) {
-                let blobInfos = { osblob_uri: res.osblob_uri, osblob_sas: res.osblob_sas }
-                localStorage.setItem('userData', JSON.stringify(res.ddUserInfos[0]))
-                localStorage.setItem('id_token', JSON.stringify(res.id_token))
-                localStorage.setItem('blobInfo', JSON.stringify(blobInfos))
-                getOrganization()
-                Allpermission()
-                router.push('/home/index')
-            }
-        }
-        //获取组织架构
-        function getOrganization() {
-            console.log(proxy, '检查proxy')
-            proxy.$api.getorganization().then((res) => {
-                console.log(res, '组织架构返回的内容')
-                res.state === 200 ? (store.commit('ChangOrganization', res.deptlist), localStorage.setItem('organization', JSON.stringify(res.deptlist))) : ''
-            })
-        }
-        //获取所有权限表
-        function Allpermission() {
-            proxy.$api.getAllpermission().then((res) => {
-                console.log(res, '权限列表')
-                res.authorityBIList ? (store.commit('getPermission', res.authorityBIList), localStorage.setItem('management', JSON.stringify(res.authorityBIList))) : []
-            })
-        }
-        // //钉钉账号或扫码登录
-        // function userlogin(proxy) {
-        //     loading = ElLoading.service({
-        //         lock: true,
-        //         text: 'Loading',
-        //         background: 'rgba(0, 0, 0, 0.7)',
-        //     })
-        //     let nonceNum = Math.floor(Math.random() * 10000)
-        //     console.log(nonceNum, '随机数')
-        //     let params = {
-        //         grant_type: 'account',
-        //         client_id: 'c7317f88-7cea-4e48-ac57-a16071f7b884',
-        //         nonce: 'habook',
-        //         account: user.value,
-        //         password: pwd.value,
-        //     }
-        //     // proxy.$api.loginUser(params).then(async (res) => {
-        //     //     console.log(res, '登录接口返回成功!')
-        //     //     res.error
-        //     //         ? (ElMessage.error('密码错误'), loading.close())
-        //     //         : res.id_token
-        //     //         ? (getTeachinfo(proxy, res.id_token), Allpermission(proxy), getOrganization(proxy))
-        //     //         : (loading.close(), ElMessage.error('登录失败'))
-        //     //     // router.push("/home");
-        //     // })
-        // }
-        // //获取教师个人信息
-        // function getTeachinfo(proxy, param) {
-        //     let parameter = { id_token: param }
-        //     proxy.$api.teacherinfo(parameter).then((res) => {
-        //         if (res.state === 1) {
-        //             ElMessage.warning('该账户未绑定钉钉信息!请扫码绑定信息!')
-        //             loginModel.value = false
-        //         } else {
-        //             localStorage.setItem('userData', JSON.stringify(res))
-        //             console.log(res, '教室个人信息')
-        //             let jwt_authtoken = {
-        //                 jwt_user: jwt_decode(res.auth_token),
-        //             }
-        //             res = Object.assign(res, jwt_authtoken)
-        //             res.state === 200 ? store.commit('getTeachdata', res) : []
-        //             loading.close()
-        //             ElMessage.success('登录成功')
-        //             store.commit('getBlobsas', { host: res.osblob_uri, sas: res.osblob_sas })
-        //             // router.push('/home')
-        //         }
-        //     })
-        // }
-        return {
-            comRef,
-            store,
-            proxy,
-            user,
-            pwd,
-            loginModel,
-            loginImg,
-            userCode,
-            editState,
-            callbackStatus,
-            router,
-            loading,
-            msgText,
-            getOrganization,
-            Allpermission,
-            loginSuccess,
-            loadings,
-        }
-    },
+      }
+      return {
+        editState,
+      }
+    }
+    //登录成功后执行的数据保存本地
+    function loginSuccess (res) {
+      if (res.state === 200) {
+        let blobInfos = { osblob_uri: res.osblob_uri, osblob_sas: res.osblob_sas }
+        localStorage.setItem('userData', JSON.stringify(res.ddUserInfos[0]))
+        localStorage.setItem('id_token', JSON.stringify(res.id_token))
+        localStorage.setItem('blobInfo', JSON.stringify(blobInfos))
+        getOrganization()
+        Allpermission()
+        router.push('/home/index')
+      }
+    }
+    //获取组织架构
+    function getOrganization () {
+      console.log(proxy, '检查proxy')
+      proxy.$api.getorganization().then((res) => {
+        console.log(res, '组织架构返回的内容')
+        res.state === 200 ? (store.commit('ChangOrganization', res.deptlist), localStorage.setItem('organization', JSON.stringify(res.deptlist))) : ''
+      })
+    }
+    //获取所有权限表
+    function Allpermission () {
+      proxy.$api.getAllpermission().then((res) => {
+        console.log(res, '权限列表')
+        res.authorityBIList ? (store.commit('getPermission', res.authorityBIList), localStorage.setItem('management', JSON.stringify(res.authorityBIList))) : []
+      })
+    }
+    // //钉钉账号或扫码登录
+    // function userlogin(proxy) {
+    //     loading = ElLoading.service({
+    //         lock: true,
+    //         text: 'Loading',
+    //         background: 'rgba(0, 0, 0, 0.7)',
+    //     })
+    //     let nonceNum = Math.floor(Math.random() * 10000)
+    //     console.log(nonceNum, '随机数')
+    //     let params = {
+    //         grant_type: 'account',
+    //         client_id: 'c7317f88-7cea-4e48-ac57-a16071f7b884',
+    //         nonce: 'habook',
+    //         account: user.value,
+    //         password: pwd.value,
+    //     }
+    //     // proxy.$api.loginUser(params).then(async (res) => {
+    //     //     console.log(res, '登录接口返回成功!')
+    //     //     res.error
+    //     //         ? (ElMessage.error('密码错误'), loading.close())
+    //     //         : res.id_token
+    //     //         ? (getTeachinfo(proxy, res.id_token), Allpermission(proxy), getOrganization(proxy))
+    //     //         : (loading.close(), ElMessage.error('登录失败'))
+    //     //     // router.push("/home");
+    //     // })
+    // }
+    // //获取教师个人信息
+    // function getTeachinfo(proxy, param) {
+    //     let parameter = { id_token: param }
+    //     proxy.$api.teacherinfo(parameter).then((res) => {
+    //         if (res.state === 1) {
+    //             ElMessage.warning('该账户未绑定钉钉信息!请扫码绑定信息!')
+    //             loginModel.value = false
+    //         } else {
+    //             localStorage.setItem('userData', JSON.stringify(res))
+    //             console.log(res, '教室个人信息')
+    //             let jwt_authtoken = {
+    //                 jwt_user: jwt_decode(res.auth_token),
+    //             }
+    //             res = Object.assign(res, jwt_authtoken)
+    //             res.state === 200 ? store.commit('getTeachdata', res) : []
+    //             loading.close()
+    //             ElMessage.success('登录成功')
+    //             store.commit('getBlobsas', { host: res.osblob_uri, sas: res.osblob_sas })
+    //             // router.push('/home')
+    //         }
+    //     })
+    // }
+    return {
+      comRef,
+      store,
+      proxy,
+      user,
+      pwd,
+      loginModel,
+      loginImg,
+      userCode,
+      editState,
+      callbackStatus,
+      router,
+      loading,
+      msgText,
+      getOrganization,
+      Allpermission,
+      loginSuccess,
+      loadings,
+    }
+  },
 }
 </script>
 <style scoped>
 .backgorundbox {
-    background: url('../assets/img/background1.png') no-repeat;
-    background-size: cover;
-    width: 100vw;
-    height: 100vh;
-    position: relative;
-    /* filter: blur(2px); */
+  background: url("../assets/img/background1.png") no-repeat;
+  background-size: cover;
+  width: 100vw;
+  height: 100vh;
+  position: relative;
+  /* filter: blur(2px); */
 }
 
 .loginbox {
-    position: absolute;
-    width: 550px;
-    height: auto;
-    top: 200px;
-    right: 110px;
-    border-radius: 10px;
-    box-shadow: 1px 1px 5px #ccc;
+  position: absolute;
+  width: 550px;
+  height: auto;
+  top: 200px;
+  right: 110px;
+  border-radius: 10px;
+  box-shadow: 1px 1px 5px #ccc;
 }
 
 .usrpwd {
-    height: 330px;
-    text-align: center;
+  height: 330px;
+  text-align: center;
 }
 
 .logintitle {
-    text-align: center;
-    font-size: 20px;
-    color: #fff;
-    margin-bottom: 8%;
-    margin-top: 5%;
+  text-align: center;
+  font-size: 20px;
+  color: #fff;
+  margin-bottom: 8%;
+  margin-top: 5%;
 }
 
 .userbox {
-    text-align: center;
-    width: 60%;
-    margin: 0 auto;
-    position: relative;
+  text-align: center;
+  width: 60%;
+  margin: 0 auto;
+  position: relative;
 }
 
 .none {
-    display: none;
+  display: none;
 }
 
 .loginbtn {
-    position: absolute;
-    display: block;
-    right: 0px;
-    top: 0px;
-    width: 44px;
-    height: 44px;
-    line-height: 43px;
+  position: absolute;
+  display: block;
+  right: 0px;
+  top: 0px;
+  width: 44px;
+  height: 44px;
+  line-height: 43px;
 }
 
 .not_has_more {
-    margin: 30px 0px 20px 0px;
-    line-height: 50px;
-    text-align: center;
-    position: relative;
-    height: 95px;
-    font-size: 14px;
-    font-family: PingFangSC-Regular, PingFang SC;
-    font-weight: 400;
-    color: rgba(140, 142, 165, 1);
-    line-height: 30px;
+  margin: 30px 0px 20px 0px;
+  line-height: 50px;
+  text-align: center;
+  position: relative;
+  height: 95px;
+  font-size: 14px;
+  font-family: PingFangSC-Regular, PingFang SC;
+  font-weight: 400;
+  color: rgba(140, 142, 165, 1);
+  line-height: 30px;
 }
 
 .not_has_more::after,
 .not_has_more::before {
-    position: absolute;
-    width: 54px;
-    height: 0.5px;
-    background: #dadada;
-    content: '';
-    top: 15px;
-    right: 28%;
+  position: absolute;
+  width: 54px;
+  height: 0.5px;
+  background: #dadada;
+  content: "";
+  top: 15px;
+  right: 28%;
 }
 
 .not_has_more::after {
-    left: 28%;
+  left: 28%;
 }
 
 .ddlogin {
-    margin-top: 3%;
+  margin-top: 3%;
 }
 
 .cut {
-    position: absolute;
-    top: 0px;
-    right: 0px;
+  position: absolute;
+  top: 0px;
+  right: 0px;
 }
 </style>
 <style>
 .userbox .el-input__inner {
-    height: 45px;
-    border-radius: 30px;
+  height: 45px;
+  border-radius: 30px;
 }
 
 .el-loading-spinner {
-    margin-top: 0 !important;
-    transform: translateY(-50%);
+  margin-top: 0 !important;
+  transform: translateY(-50%);
 }
 
 .el-loading-text {
-    padding-top: 50px;
-    background-image: url('../assets/img/loading2.gif') !important;
-    background-repeat: no-repeat;
-    background-position: top center;
-    background-size: 75px auto;
+  padding-top: 50px;
+  background-image: url("../assets/img/loading2.gif") !important;
+  background-repeat: no-repeat;
+  background-position: top center;
+  background-size: 75px auto;
 }
 
 .el-loading-spinner .circular {
-    display: none;
+  display: none;
 }
 </style>
 

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 777 - 785
TEAMModelBI/ClientApp/src/view/participation/index.vue


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1317 - 1302
TEAMModelBI/ClientApp/src/view/participation/setAbility.vue


+ 46 - 2
TEAMModelBI/ClientApp/src/view/schoolServe/school.vue

@@ -62,11 +62,22 @@
                 </el-table-column> -->
         <el-table-column :label="$t(`schoolManages.tables.scale`)" class="school-table-edition" align="center">
           <template #default="scope">
-            <el-image style="width: 80px; height: 80px" :src="imgData.basics" fit="fill" v-if="scope.row.scale === 0"></el-image>
+            <!-- <el-image style="width: 80px; height: 80px" :src="imgData.basics" fit="fill" v-if="scope.row.scale === 0"></el-image>
             <el-image style="width: 80px; height: 80px" :src="imgData.standard" fit="fill" v-else-if="scope.row.scale === 500 && scope.row.hard.length === 0 && scope.row.serial.length === 0 && scope.row.service.length === 0">
             </el-image>
             <el-image style="width: 80px; height: 80px" :src="imgData.specialty" fit="fill" v-else-if="scope.row.scale === 500 && (scope.row.hard.length != 0 || scope.row.serial.length != 0 || scope.row.service.length != 0)">
-            </el-image>
+            </el-image> -->
+            <div class="scalebox">
+              <p class="scalebox-content" v-if="scope.row.scale === 0">
+                基础版
+              </p>
+              <p class="scalebox-content" v-else-if="scope.row.scale === 500 && scope.row.hard.length === 0 && scope.row.serial.length === 0 && scope.row.service.length === 0">
+                标准版
+              </p>
+              <p class="scalebox-content" v-else-if="scope.row.scale === 500 && (scope.row.hard.length != 0 || scope.row.serial.length != 0 || scope.row.service.length != 0)">
+                专业版
+              </p>
+            </div>
           </template>
         </el-table-column>
         <el-table-column prop="id" :label="$t(`schoolManages.tables.brevityCode`)" align="center" />
@@ -970,6 +981,39 @@ export default {
   font-size: 14px;
   color: #636e72;
 }
+.scalebox {
+  width: 100%;
+}
+.scalebox-content {
+  color: #592e02;
+  background: linear-gradient(90deg, #734311, #ffc78c, #734311);
+  text-align: center;
+  padding: 2px 0;
+  font-size: 12px;
+  z-index: 999;
+  position: relative;
+  margin-bottom: 0px;
+}
+.scalebox-content::before {
+  border-top: 6px solid #dca974;
+  bottom: -1px;
+  right: -4px;
+  content: " ";
+  position: absolute;
+  border-right: 6px solid transparent;
+  border-left: 6px solid transparent;
+  transform: rotate(-45deg);
+}
+.scalebox-content:after {
+  content: " ";
+  position: absolute;
+  border-right: 6px solid transparent;
+  border-left: 6px solid transparent;
+  transform: rotate(-45deg);
+  border-bottom: 6px solid #dca974;
+  top: -1px;
+  left: -4px;
+}
 </style>
 <style>
 .schoolboxea .el-cascader {

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1077 - 832
TEAMModelBI/ClientApp/src/view/schoolmanage/schoolAnalyse.vue


+ 3 - 3
TEAMModelBI/ClientApp/src/view/systemConfig/operate.vue

@@ -59,11 +59,11 @@ export default {
     const identityValue = ref([])
     const options = [
       {
-        value: 'channelcrew',
-        label: '渠道人员',
+        value: 'rdc',
+        label: '研发部',
       },
       {
-        value: 'sellcrew',
+        value: 'sales',
         label: '销售',
       },
       {

+ 1 - 1
TEAMModelBI/ClientApp/src/view/teachermanage/traitmanage.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="abilitysInfo">
     <!--外部呈现-->
-    <div class="site-box" v-show="siteCut.show">
+    <div class="site-box" v-show="siteCut.show && treeModel === 'default'">
       <span :class="[siteCut.positionIndex ===1 ? 'site-pitch':'']" @click="cutSite(1,'china')">中国</span>
       <span :class="[siteCut.positionIndex ===2 ? 'site-pitch':'']" @click="cutSite(2,'international')">国际</span>
     </div>