ui库和web端产品库合并版本(还需修复细节)
This commit is contained in:
18
ui/meta/cdn/aes.js
Normal file
18
ui/meta/cdn/aes.js
Normal file
File diff suppressed because one or more lines are too long
5892
ui/meta/cdn/crypto-js.js
Normal file
5892
ui/meta/cdn/crypto-js.js
Normal file
File diff suppressed because it is too large
Load Diff
7
ui/meta/cdn/mode-ecb.js
Normal file
7
ui/meta/cdn/mode-ecb.js
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
CryptoJS v3.1.2
|
||||
code.google.com/p/crypto-js
|
||||
(c) 2009-2013 by Jeff Mott. All rights reserved.
|
||||
code.google.com/p/crypto-js/wiki/License
|
||||
*/
|
||||
CryptoJS.mode.ECB = (function () { var a = CryptoJS.lib.BlockCipherMode.extend(); a.Encryptor = a.extend({ processBlock: function (a, b) { this._cipher.encryptBlock(a, b) } }); a.Decryptor = a.extend({ processBlock: function (a, b) { this._cipher.decryptBlock(a, b) } }); return a }())
|
||||
1
ui/meta/cdn/mpfont.js
Normal file
1
ui/meta/cdn/mpfont.js
Normal file
File diff suppressed because one or more lines are too long
25
ui/meta/cdn/pad-zeropadding.js
Normal file
25
ui/meta/cdn/pad-zeropadding.js
Normal file
@@ -0,0 +1,25 @@
|
||||
/**
|
||||
* Zero padding strategy.
|
||||
*/
|
||||
CryptoJS.pad.ZeroPadding = {
|
||||
pad: function (data, blockSize) {
|
||||
// Shortcut
|
||||
var blockSizeBytes = blockSize * 4
|
||||
|
||||
// Pad
|
||||
data.clamp()
|
||||
data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes)
|
||||
},
|
||||
|
||||
unpad: function (data) {
|
||||
// Shortcut
|
||||
var dataWords = data.words
|
||||
|
||||
// Unpad
|
||||
var i = data.sigBytes - 1
|
||||
while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {
|
||||
i--
|
||||
}
|
||||
data.sigBytes = i + 1
|
||||
}
|
||||
}
|
||||
1
ui/meta/cdn/weappFont.js
Normal file
1
ui/meta/cdn/weappFont.js
Normal file
File diff suppressed because one or more lines are too long
88
ui/meta/js/area.js
Normal file
88
ui/meta/js/area.js
Normal file
@@ -0,0 +1,88 @@
|
||||
import request from "./request";
|
||||
|
||||
|
||||
export default class Area {
|
||||
constructor(code, hash = {}) {
|
||||
this.id = code
|
||||
this.level = Area.getLevelByAreaId(code)
|
||||
this.areaMap = Object.values(this.getAreaInfo(code))
|
||||
if (Object.keys(hash).length > 0) {
|
||||
this.getName(this.areaMap.map(id => hash[id]))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地区的行政等级
|
||||
* @param code 地区编码
|
||||
* @returns {number}
|
||||
*/
|
||||
static getLevelByAreaId(code) {
|
||||
if (code) {
|
||||
if (code.length === 2 || /0{10}$/.test(code)) return 0;
|
||||
else if (/0{8}$/.test(code)) return 1;
|
||||
else if (/0{6}$/.test(code)) return 2;
|
||||
else if (/0{3}$/.test(code)) return 3;
|
||||
else return 4
|
||||
} else return -1
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据地区编码获取指定等级的地区编码
|
||||
* @param value 地区编码
|
||||
* @param level 指定等级
|
||||
* @returns {string|null|*}
|
||||
*/
|
||||
static getAreaCodeByLevel(value, level) {
|
||||
if (value) {
|
||||
const areaNumber = value.toString();
|
||||
switch (level) {
|
||||
case 0:
|
||||
return areaNumber.substring(0, 2) + '0000000000';
|
||||
case 1:
|
||||
return areaNumber.substring(0, 4) + '00000000';
|
||||
case 2:
|
||||
return areaNumber.substring(0, 6) + '000000';
|
||||
case 3:
|
||||
return areaNumber.substring(0, 9) + '000';
|
||||
case 4:
|
||||
return areaNumber
|
||||
}
|
||||
} else return null
|
||||
}
|
||||
|
||||
static createByAction(areaId, ins = request, action = "/admin/area/getAllParentAreaId") {
|
||||
return ins.post(action, null, {params: {areaId}, withoutToken: 1}).then(res => res?.data?.reverse() || [])
|
||||
}
|
||||
|
||||
getAreaInfo(id) {
|
||||
let info = {}
|
||||
const currentLevel = Area.getLevelByAreaId(id);
|
||||
for (let i = 0; i <= currentLevel; i++) {
|
||||
info[i] = Area.getAreaCodeByLevel(id, i);
|
||||
}
|
||||
return info
|
||||
}
|
||||
|
||||
async getAreaName() {
|
||||
const names = await Area.createByAction(this.id);
|
||||
this.getName(names)
|
||||
}
|
||||
|
||||
getName(names) {
|
||||
this.meta = names
|
||||
this.nameMap = names?.map(e => e.name) || []
|
||||
this.name = names?.slice(-1)?.[0]?.name
|
||||
this.fullname = this.nameMap.join('')
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步从数据库中获取地区信息
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
static async init(code) {
|
||||
const names = await Area.createByAction(code),
|
||||
area = new Area(code)
|
||||
area.getName(names)
|
||||
return area
|
||||
}
|
||||
}
|
||||
20
ui/meta/js/coin.js
Normal file
20
ui/meta/js/coin.js
Normal file
@@ -0,0 +1,20 @@
|
||||
export default {
|
||||
cny(money) {
|
||||
if (money) {
|
||||
money.toLocaleString('zh-Hans-CN', {style: 'currency', currency: "CNY"})
|
||||
}
|
||||
return money
|
||||
},
|
||||
cn(money) {
|
||||
let num = parseFloat(money), cnMoney = '',
|
||||
units = '仟佰拾亿仟佰拾万仟佰拾元角分',
|
||||
cnNum = '零壹贰叁肆伍陆柒捌玖'
|
||||
num = num.toFixed(2).replace(/\./g,'')
|
||||
units = units.substring(units.length - num.length)
|
||||
console.log(num, units.length, num.length)
|
||||
Array.from(num).map((e, i) => {
|
||||
cnMoney += cnNum.charAt(e) + units.charAt(i)
|
||||
})
|
||||
return cnMoney.replace(/零角零分$/, '整').replace(/零[仟佰拾]/g, '零').replace(/零{2,}/g, '零').replace(/零([亿|万])/g, '$1').replace(/零+元/, '元').replace(/亿零{0,3}万/, '亿').replace(/^元/, "零元")
|
||||
}
|
||||
}
|
||||
77
ui/meta/js/dict.js
Normal file
77
ui/meta/js/dict.js
Normal file
@@ -0,0 +1,77 @@
|
||||
import request from "./request";
|
||||
|
||||
/**
|
||||
* 封装字典工具类
|
||||
*/
|
||||
const $dict = {
|
||||
url: "/admin/dictionary/queryValsByCodeList",
|
||||
loading: [],
|
||||
resolves: [],
|
||||
getStorage() {
|
||||
const dicts = JSON.parse(localStorage.getItem('dicts') || null)
|
||||
return dicts?.data || dicts || [];
|
||||
},
|
||||
setUrl(v) {
|
||||
this.url = v
|
||||
},
|
||||
getData(codeList) {
|
||||
codeList = [codeList].flat().filter(Boolean).toString()
|
||||
return request.post(this.url, null, {
|
||||
withoutToken: true, params: {codeList}
|
||||
}).then(res => res?.data && this.setStorage(res.data))
|
||||
},
|
||||
load(...code) {
|
||||
return new Promise(resolve => {
|
||||
this.resolves.push(resolve)
|
||||
if (this.loading.length == 2) {
|
||||
const [timer, codes] = this.loading;
|
||||
clearTimeout(timer)
|
||||
code = Array.from(new Set([codes, code].flat()))
|
||||
}
|
||||
const timer = setTimeout(() => {
|
||||
this.getData(code).then(() => Promise.all(this.resolves.map(e => e())).then(() => this.resolves = []))
|
||||
}, 500)
|
||||
this.loading = [timer, code]
|
||||
})
|
||||
},
|
||||
setStorage(data) {
|
||||
let ds = this.getStorage()
|
||||
data.map(p => {
|
||||
if (ds.some(d => d.key == p.key)) {
|
||||
const index = ds.findIndex(d => d.key == p.key)
|
||||
ds.splice(index, 1, p)
|
||||
} else {
|
||||
ds.push(p)
|
||||
}
|
||||
})
|
||||
localStorage.setItem("dicts", JSON.stringify([ds].flat()))
|
||||
},
|
||||
getDict(key) {
|
||||
let dict = this.getStorage().find(e => e.key == key)
|
||||
!dict && console.warn("字典%s缺少加载...", key)
|
||||
return dict ? dict.values : []
|
||||
},
|
||||
getValue(key, label) {
|
||||
let dict = this.getDict(key)
|
||||
if (dict) {
|
||||
let item = dict.find(v => v.dictName == label)
|
||||
return item ? item.dictValue : label
|
||||
} else return label
|
||||
},
|
||||
getLabel(key, value) {
|
||||
let dict = this.getDict(key)
|
||||
if (dict) {
|
||||
let item = dict.find(v => v.dictValue == value)
|
||||
return item ? item.dictName : value
|
||||
} else return value
|
||||
},
|
||||
getColor(key, value) {
|
||||
let dict = this.getDict(key)
|
||||
if (dict) {
|
||||
let item = dict.find(v => v.dictValue == value)
|
||||
return item ? item.dictColor : value
|
||||
} else return value
|
||||
},
|
||||
}
|
||||
|
||||
export default $dict
|
||||
23
ui/meta/js/encryption.js
Normal file
23
ui/meta/js/encryption.js
Normal file
@@ -0,0 +1,23 @@
|
||||
import CryptoJs from "../cdn/crypto-js";
|
||||
|
||||
/**
|
||||
* 密码加密工具
|
||||
* @param params
|
||||
* @param c 加载尝试计数器
|
||||
* @returns {string}
|
||||
*/
|
||||
export const $encryption = (params, c = 0) => {
|
||||
if (CryptoJs) {
|
||||
const key = "thanks,villcloud"
|
||||
let iv = CryptoJs.enc.Latin1.parse(key)
|
||||
let encrypted = CryptoJs.AES.encrypt(params.password, iv, {
|
||||
iv,
|
||||
mode: CryptoJs.mode.CBC,
|
||||
padding: CryptoJs.pad.ZeroPadding
|
||||
})
|
||||
return encrypted.toString()
|
||||
} else if (c < 10) {
|
||||
setTimeout(() => $encryption(params, ++c), 200)
|
||||
} else console.error("无法加载CryptoJs")
|
||||
}
|
||||
export default $encryption
|
||||
238
ui/meta/js/identity.js
Normal file
238
ui/meta/js/identity.js
Normal file
@@ -0,0 +1,238 @@
|
||||
import dayjs from "./moment";
|
||||
|
||||
|
||||
const PARAMS = {
|
||||
/* 省,直辖市代码表 */
|
||||
provinceAndCitys: {
|
||||
11: '北京',
|
||||
12: '天津',
|
||||
13: '河北',
|
||||
14: '山西',
|
||||
15: '内蒙古',
|
||||
21: '辽宁',
|
||||
22: '吉林',
|
||||
23: '黑龙江',
|
||||
31: '上海',
|
||||
32: '江苏',
|
||||
33: '浙江',
|
||||
34: '安徽',
|
||||
35: '福建',
|
||||
36: '江西',
|
||||
37: '山东',
|
||||
41: '河南',
|
||||
42: '湖北',
|
||||
43: '湖南',
|
||||
44: '广东',
|
||||
45: '广西',
|
||||
46: '海南',
|
||||
50: '重庆',
|
||||
51: '四川',
|
||||
52: '贵州',
|
||||
53: '云南',
|
||||
54: '西藏',
|
||||
61: '陕西',
|
||||
62: '甘肃',
|
||||
63: '青海',
|
||||
64: '宁夏',
|
||||
65: '新疆',
|
||||
71: '台湾',
|
||||
81: '香港',
|
||||
82: '澳门',
|
||||
91: '国外'
|
||||
},
|
||||
|
||||
/* 每位加权因子 */
|
||||
powers: [
|
||||
'7',
|
||||
'9',
|
||||
'10',
|
||||
'5',
|
||||
'8',
|
||||
'4',
|
||||
'2',
|
||||
'1',
|
||||
'6',
|
||||
'3',
|
||||
'7',
|
||||
'9',
|
||||
'10',
|
||||
'5',
|
||||
'8',
|
||||
'4',
|
||||
'2'
|
||||
],
|
||||
|
||||
/* 第18位校检码 */
|
||||
parityBit: ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'],
|
||||
|
||||
/* 性别 */
|
||||
genders: {1: '男', 0: '女'},
|
||||
}
|
||||
|
||||
const Check = {
|
||||
/* 校验地址码 */
|
||||
checkAddressCode(addressCode) {
|
||||
const check = /^[1-9]\d{5}$/.test(addressCode)
|
||||
if (!check) return false
|
||||
return !!PARAMS.provinceAndCitys[parseInt(addressCode.substring(0, 2))]
|
||||
},
|
||||
/* 校验日期码 */
|
||||
checkBirthDayCode(birDayCode) {
|
||||
const check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(
|
||||
birDayCode
|
||||
)
|
||||
if (!check) return false
|
||||
const yyyy = parseInt(birDayCode.substring(0, 4), 10)
|
||||
const mm = parseInt(birDayCode.substring(4, 6), 10)
|
||||
const dd = parseInt(birDayCode.substring(6), 10)
|
||||
const xdata = new Date(yyyy, mm - 1, dd)
|
||||
if (xdata > new Date()) {
|
||||
return false // 生日不能大于当前日期
|
||||
} else {
|
||||
return (
|
||||
xdata.getFullYear() == yyyy &&
|
||||
xdata.getMonth() == mm - 1 &&
|
||||
xdata.getDate() == dd
|
||||
)
|
||||
}
|
||||
},
|
||||
/* 验证校检码 */
|
||||
checkParityBit(idCardNo) {
|
||||
const parityBit = idCardNo.charAt(17).toUpperCase()
|
||||
return this.getParityBit(idCardNo) == parityBit
|
||||
},
|
||||
// 校验15位的身份证号码
|
||||
check15IdCardNo(idCardNo) {
|
||||
// 15位身份证号码的基本校验
|
||||
let check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(
|
||||
idCardNo
|
||||
)
|
||||
if (!check) return false
|
||||
// 校验地址码
|
||||
const addressCode = idCardNo.substring(0, 6)
|
||||
check = this.checkAddressCode(addressCode)
|
||||
if (!check) return false
|
||||
const birDayCode = '19' + idCardNo.substring(6, 12)
|
||||
// 校验日期码
|
||||
return this.checkBirthDayCode(birDayCode)
|
||||
},
|
||||
|
||||
// 校验18位的身份证号码
|
||||
check18IdCardNo(idCardNo) {
|
||||
// 18位身份证号码的基本格式校验
|
||||
let check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(
|
||||
idCardNo
|
||||
)
|
||||
if (!check) return false
|
||||
// 校验地址码
|
||||
const addressCode = idCardNo.substring(0, 6)
|
||||
check = this.checkAddressCode(addressCode)
|
||||
if (!check) return false
|
||||
// 校验日期码
|
||||
const birDayCode = idCardNo.substring(6, 14)
|
||||
check = this.checkBirthDayCode(birDayCode)
|
||||
if (!check) return false
|
||||
// 验证校检码
|
||||
return this.checkParityBit(idCardNo)
|
||||
},
|
||||
/* 计算校检码 */
|
||||
getParityBit(idCardNo) {
|
||||
const id17 = idCardNo.substring(0, 17)
|
||||
/* 加权 */
|
||||
let power = 0
|
||||
for (let i = 0; i < 17; i++) {
|
||||
power += parseInt(id17.charAt(i), 10) * parseInt(PARAMS.powers[i])
|
||||
}
|
||||
/* 取模 */
|
||||
const mod = power % 11
|
||||
return PARAMS.parityBit[mod]
|
||||
}
|
||||
}
|
||||
|
||||
export default class Identity {
|
||||
constructor(code) {
|
||||
this.code = this.getId18(code)
|
||||
this.init()
|
||||
}
|
||||
|
||||
init() {
|
||||
const {code} = this
|
||||
if (!!code) {
|
||||
this.hideCode = Identity.hideId(code)
|
||||
this.getIdCardInfo(code)
|
||||
}
|
||||
}
|
||||
|
||||
static hideId(code) {
|
||||
return code?.replace(/^(\d{10})\d{4}(.{4}$)/g, `$1${Array(5).join('*')}$2`)
|
||||
}
|
||||
|
||||
getId18(code) {
|
||||
if (code.length == 15) {
|
||||
const id17 = code.substring(0, 6) + '19' + code.substring(6)
|
||||
const parityBit = Check.getParityBit(id17)
|
||||
return id17 + parityBit
|
||||
} else if (code.length == 18) {
|
||||
return code
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
getIdCardInfo(idCardNo) {
|
||||
this.birthday = Identity.getBirthday(idCardNo)
|
||||
this.sex = Identity.getSex(idCardNo)
|
||||
this.gender = PARAMS.genders[this.sex]
|
||||
this.age = Identity.getAge(idCardNo)
|
||||
this.areaId = Identity.getArea(idCardNo)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取性别
|
||||
* @param code
|
||||
* @returns {string}
|
||||
*/
|
||||
static getSex(code) {
|
||||
return (Number(code.substring(16, 17)) % 2).toString()
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取年龄
|
||||
* @param code
|
||||
* @returns {number}
|
||||
*/
|
||||
static getAge(code) {
|
||||
const birthday = dayjs(code.substring(6, 14), 'YYYYMMDD')
|
||||
return Math.ceil(dayjs.duration(dayjs().unix() - dayjs(birthday).unix(), 's').asYears())
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地区编码
|
||||
* @param code
|
||||
*/
|
||||
static getArea(code) {
|
||||
return code.substring(0, 6) + new Array(7).join(0)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取生日
|
||||
*/
|
||||
static getBirthday(code) {
|
||||
return dayjs(code.substring(6, 14), 'YYYYMMDD').format("YYYY-MM-DD").replace('Invalid Date', '')
|
||||
}
|
||||
|
||||
/* 校验15位或18位的身份证号码 */
|
||||
static check(idCardNo) {
|
||||
// 15位和18位身份证号码的基本校验
|
||||
const check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo)
|
||||
if (!check) return false
|
||||
// 判断长度为15位或18位
|
||||
if (idCardNo.length == 15) {
|
||||
return Check.check15IdCardNo(idCardNo)
|
||||
} else if (idCardNo.length == 18) {
|
||||
return Check.check18IdCardNo(idCardNo)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
305
ui/meta/js/modules.js
Normal file
305
ui/meta/js/modules.js
Normal file
@@ -0,0 +1,305 @@
|
||||
import http from "./request";
|
||||
import utils from "./utils";
|
||||
import Vue from "vue"
|
||||
|
||||
export const sys = {
|
||||
state: () => ({
|
||||
info: {},
|
||||
theme: {}
|
||||
}),
|
||||
mutations: {
|
||||
setSysInfo(state, info) {
|
||||
state.info = info
|
||||
},
|
||||
setTheme(state, theme) {
|
||||
state.theme = theme
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
getSystem({commit}, info) {
|
||||
return http.post("/app/appdvcpconfig/getSystemInfo", null, {withoutToken: true}).then(res => {
|
||||
if (res?.data) {
|
||||
let {systemInfo, colorScheme, enableGreyFilter} = res.data
|
||||
systemInfo = JSON.parse(systemInfo || null) || {}
|
||||
colorScheme = JSON.parse(colorScheme || null) || {}
|
||||
commit("setSysInfo", {...info, ...systemInfo})
|
||||
commit("setTheme", {colorScheme, enableGreyFilter})
|
||||
return res.data
|
||||
} else return Promise.reject()
|
||||
}).catch(() => commit("setSysInfo", info))
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 用户信息
|
||||
*/
|
||||
export const user = {
|
||||
state: () => ({
|
||||
token: "",
|
||||
info: {},
|
||||
routes: []
|
||||
}),
|
||||
mutations: {
|
||||
setToken(state, token) {
|
||||
state.token = token;
|
||||
},
|
||||
setUserInfo(state, info) {
|
||||
state.info = info
|
||||
},
|
||||
cleanUserInfo(state) {
|
||||
state.info = {}
|
||||
state.token = ""
|
||||
},
|
||||
setUserExtra(state, extra = {}) {
|
||||
Object.keys(extra).map(e => Vue.set(state, e, extra[e]))
|
||||
},
|
||||
setRoutes(state,routes){
|
||||
state.routes = routes
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
getToken({commit}, params) {
|
||||
let action = "/auth/oauth/token"
|
||||
if (params?.action) {
|
||||
action = params?.action
|
||||
delete params?.action
|
||||
}
|
||||
const password = utils.$encryption(params)
|
||||
return http.post(action, null, {
|
||||
auth: {
|
||||
username: 'villcloud',
|
||||
password: "villcloud"
|
||||
},
|
||||
params: {grant_type: 'password', scope: 'server', ...params, password}
|
||||
}).then(res => {
|
||||
if (res?.access_token) {
|
||||
const {token_type, access_token} = res, token = [token_type, access_token].join(" ")
|
||||
return commit('setToken', token)
|
||||
}
|
||||
})
|
||||
},
|
||||
getUserInfo({commit, dispatch}) {
|
||||
return http.post("/admin/user/detail-phone").then(res => {
|
||||
if (res?.data) {
|
||||
commit("setUserInfo", res.data)
|
||||
return Promise.all([dispatch('getWorkflowConfigs')]).then(() => res.data)
|
||||
}
|
||||
})
|
||||
},
|
||||
getRouteName({state}, appName) {
|
||||
return state.routes.find(e => e.component == appName)?.route || appName
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 企微jssdk功能
|
||||
*/
|
||||
let timer = {injectJWeixin: null, initOpenData: null}
|
||||
export const wxwork = {
|
||||
state: () => ({
|
||||
agentSignURL: "",
|
||||
apiList: [],
|
||||
config: {}
|
||||
}),
|
||||
mutations: {
|
||||
setConfig(state, config) {
|
||||
state.config = config
|
||||
},
|
||||
setAgentSignURL(state, url) {
|
||||
state.agentSignURL = url
|
||||
},
|
||||
setApiList(state, list) {
|
||||
state.apiList = list
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
agentSign({state, commit, rootState}, params) {
|
||||
//授权jssdk在url上使用,并获取corpId
|
||||
let url = window.location.href
|
||||
if (state.agentSignURL == url && state.config.corpId) {
|
||||
return Promise.resolve()
|
||||
} else {
|
||||
commit("setAgentSignURL", url)
|
||||
commit("setApiList", [])
|
||||
let action = "/app/wxcptp/portal/agentSign"
|
||||
if (!!params?.action) {
|
||||
action = params.action
|
||||
delete params.action
|
||||
}
|
||||
const {corpId} = rootState.user.info
|
||||
return http.post(action, null, {
|
||||
withoutToken: true,
|
||||
params: {corpId, ...params, url}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
let config = {
|
||||
...params,
|
||||
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
|
||||
beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
|
||||
corpid: res.data.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
|
||||
agentid: res.data.agentId, // 必填,企业微信的应用id (e.g. 1000247)
|
||||
timestamp: Number(res.data.timestamp), // 必填,生成签名的时间戳
|
||||
nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
|
||||
signature: res.data.signature,// 必填,签名,见 附录-JS-SDK使用权限签名算法
|
||||
...res.data
|
||||
}
|
||||
commit("setConfig", config)
|
||||
return config
|
||||
}
|
||||
}).catch(err => {
|
||||
commit("setAgentSignURL", "")
|
||||
console.error(err)
|
||||
})
|
||||
}
|
||||
},
|
||||
injectJWeixin({state, commit}, apis) {
|
||||
const inject = (jsApiList) => new Promise((resolve, reject) => {
|
||||
jsApiList = jsApiList || []
|
||||
if (timer.injectJWeixin) {//节流设置,50ms内的多次请求合并到一处
|
||||
clearTimeout(timer.injectJWeixin)
|
||||
jsApiList = [...new Set([...state.apiList, ...jsApiList])]
|
||||
commit("setApiList", jsApiList)
|
||||
}
|
||||
timer.injectJWeixin = setTimeout(() => {
|
||||
const sdk = wx?.agentConfig ? wx : jWeixin
|
||||
sdk?.agentConfig({
|
||||
...state.config, jsApiList,
|
||||
success: res => resolve(res),
|
||||
fail: err => {
|
||||
console.error(err)
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
}, 50)
|
||||
})
|
||||
return inject(apis)
|
||||
},
|
||||
initOpenData({dispatch, commit}, params = {}) {
|
||||
const initWOD = (count = 0) => {
|
||||
if (!!window?.WWOpenData) {
|
||||
const canvas = params?.canvas
|
||||
if (canvas) delete params.canvas
|
||||
if (timer.initOpenData) {
|
||||
clearTimeout(timer.initOpenData)
|
||||
}
|
||||
const init = () => canvas ? dispatch('initCanvas') : dispatch('bindElements')
|
||||
timer.initOpenData = setTimeout(() => {
|
||||
window?.WWOpenData?.checkSession({
|
||||
success: () => init(),
|
||||
fail: () => {
|
||||
dispatch('agentSign', params).then(() => dispatch("injectJWeixin")).then(() => init())
|
||||
}
|
||||
})
|
||||
}, 50)
|
||||
} else if (count > 10) {
|
||||
console.log("无法获取WWOpenData")
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
initWOD(++count)
|
||||
}, 200)
|
||||
}
|
||||
}
|
||||
dispatch('agentSign', params).then(() => dispatch("injectJWeixin")).then(() => initWOD())
|
||||
},
|
||||
bindElements() {
|
||||
const nodes = document.querySelectorAll('.AiOpenData')
|
||||
window.WWOpenData?.bindAll(nodes)
|
||||
},
|
||||
initCanvas() {
|
||||
window.WWOpenData?.initCanvas()
|
||||
},
|
||||
transCanvas(store, items) {
|
||||
return new Promise((resolve, reject) => {
|
||||
window.WWOpenData?.prefetch({items}, (err, data) => {
|
||||
err ? reject(err) : resolve(data)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 各种前端方案记录选择
|
||||
*/
|
||||
export const logs = {
|
||||
state: () => ({
|
||||
closeIntro: []
|
||||
}),
|
||||
mutations: {
|
||||
addCloseIntro(state, app) {
|
||||
state.closeIntro.push(app)
|
||||
}
|
||||
},
|
||||
}
|
||||
/**
|
||||
* 流程信息
|
||||
*/
|
||||
const startProcess = (form) => {
|
||||
const {bid, app, flows = {}} = form
|
||||
const process = flows[app]
|
||||
if (!!process) {
|
||||
const {id: pid, config} = process
|
||||
let workflowConfig = JSON.parse(config || null), nowNodeId = [], startId
|
||||
workflowConfig?.nodes?.map(e => {
|
||||
if (e.type == "start") {
|
||||
e.properties.isStart = true
|
||||
e.properties.updateTime = utils.$moment().format("YYYY-MM-DD HH:mm:ss")
|
||||
startId = e.id
|
||||
}
|
||||
})
|
||||
workflowConfig?.edges?.map(e => {
|
||||
if (e.sourceNodeId == startId) {
|
||||
nowNodeId.push(e.targetNodeId)
|
||||
}
|
||||
})
|
||||
nowNodeId = nowNodeId?.toString()
|
||||
return !!nowNodeId && http.post("/app/appworkflowlog/addOrUpdate", {bid, pid, nowNodeId, workflowConfig: JSON.stringify(workflowConfig)})
|
||||
}
|
||||
}
|
||||
export const workflow = {
|
||||
state: () => ({}),
|
||||
mutations: {
|
||||
setWfConfigs(state, configs) {
|
||||
configs.map(e => {
|
||||
Vue.set(state, e.app, e)
|
||||
})
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
getWorkflowConfigs({commit}) {
|
||||
return http.post("/app/appworkflowmanage/list", null, {
|
||||
params: {size: 999}
|
||||
}).then(res => {
|
||||
if (res?.data) {
|
||||
return commit("setWfConfigs", res.data.records)
|
||||
}
|
||||
}).catch(() => 0)
|
||||
},
|
||||
startFlow(context, form) {
|
||||
startProcess(form)
|
||||
},
|
||||
endFlow(context, form) {
|
||||
let {workflowConfig = {}, nowNodeId} = form
|
||||
workflowConfig?.nodes?.map(e => {
|
||||
if (e.type == "end") {
|
||||
e.properties.isFinished = true
|
||||
e.properties.updateTime = utils.$moment().format("YYYY-MM-DD HH:mm:ss")
|
||||
nowNodeId = "nowNodeId"
|
||||
}
|
||||
})
|
||||
return http.post("/app/appworkflowlog/addOrUpdate", {...form, nowNodeId, workflowConfig: JSON.stringify(workflowConfig)})
|
||||
}
|
||||
},
|
||||
processAdapter(config) {//流程业务拦截器
|
||||
if (/addOrUpdate/.test(config.url)) {
|
||||
let app = config.url.replace(/.+(app[^\\\/]+).+/g, '$1')
|
||||
if (/appapplicationinfo/.test(app)) {//动态台账表单
|
||||
app = config.params?.appId
|
||||
} else if (/appcontentinfo/.test(app)) {//内容发布
|
||||
app = config.data?.moduleId
|
||||
}
|
||||
config.workflow = app
|
||||
}
|
||||
return config
|
||||
},
|
||||
startProcess
|
||||
}
|
||||
35
ui/meta/js/moment.js
Normal file
35
ui/meta/js/moment.js
Normal file
@@ -0,0 +1,35 @@
|
||||
import moment from 'dayjs'
|
||||
import duration from 'dayjs/plugin/duration'
|
||||
import updateLocale from 'dayjs/plugin/updateLocale'
|
||||
import customParseFormat from 'dayjs/plugin/customParseFormat'
|
||||
import 'dayjs/locale/zh-cn'
|
||||
|
||||
moment.locale('zh-cn')
|
||||
moment.extend(updateLocale)
|
||||
moment.extend(customParseFormat)
|
||||
moment.extend(duration)
|
||||
moment.updateLocale('zh-cn', {
|
||||
weekdays: "星期日|星期一|星期二|星期三|星期四|星期五|星期六".split("|"),
|
||||
meridiem(hour) {
|
||||
let word = ""
|
||||
if (hour < 6) {
|
||||
word = "凌晨"
|
||||
} else if (hour < 9) {
|
||||
word = "早上"
|
||||
} else if (hour < 12) {
|
||||
word = "上午"
|
||||
} else if (hour < 14) {
|
||||
word = "中午"
|
||||
} else if (hour < 17) {
|
||||
word = "下午"
|
||||
} else if (hour < 19) {
|
||||
word = "傍晚"
|
||||
} else if (hour < 22) {
|
||||
word = "晚上"
|
||||
} else {
|
||||
word = "夜里"
|
||||
}
|
||||
return word;
|
||||
}
|
||||
})
|
||||
export default moment
|
||||
83
ui/meta/js/request.js
Normal file
83
ui/meta/js/request.js
Normal file
@@ -0,0 +1,83 @@
|
||||
/* eslint-disable */
|
||||
import axios from 'axios'
|
||||
import {Message} from "element-ui";
|
||||
import {workflow} from "./modules";
|
||||
|
||||
const instance = axios.create({
|
||||
baseURL: process.env.NODE_ENV === "production" ? "/" : "/lan",
|
||||
timeout: 600000,
|
||||
withCredentials: true,
|
||||
})
|
||||
|
||||
const getStore = () => JSON.parse(localStorage.getItem("vuex") || null) || {}
|
||||
|
||||
const getToken = () => getStore().user?.token
|
||||
/**
|
||||
* 节流工具
|
||||
*/
|
||||
let throttleMap = {}
|
||||
const source = axios.CancelToken.source();
|
||||
instance.interceptors.request.use(config => {
|
||||
if (config.throttle) {// 节流处理
|
||||
let timer = throttleMap[config.url]
|
||||
if (!!timer) {
|
||||
config.cancelToken = source.token
|
||||
source.cancel("节流控制,取消请求:" + config.url)
|
||||
}
|
||||
throttleMap[config.url] = setTimeout(() => {
|
||||
throttleMap[config.url] = null
|
||||
}, config.throttle)
|
||||
}
|
||||
if (!config.withoutToken && getToken()) {
|
||||
config.headers["Authorization"] = getToken()
|
||||
}
|
||||
//BUG 9456 去除传参空格
|
||||
if (config.params) {
|
||||
Object.keys(config.params).map(e => {
|
||||
if (typeof config.params[e] == "string") config.params[e] = config.params[e].trim()
|
||||
})
|
||||
}
|
||||
config = workflow.processAdapter(config)
|
||||
return config
|
||||
}, err => {
|
||||
console.error(err)
|
||||
})
|
||||
instance.interceptors.response.use(res => {
|
||||
if (res && !!res.config.workflow) {
|
||||
const {config: {workflow: app}, data: {data: bid}} = res
|
||||
bid && workflow.startProcess({app, bid, flows: getStore().workflow})
|
||||
}
|
||||
if (res && res.data) {
|
||||
if (!!res.data.code?.toString()) {
|
||||
if (res.data.code == 0) {
|
||||
return res.data
|
||||
} else if (!!res.config.pureBack) {
|
||||
return res.data
|
||||
} else if (res.data.code == 401) {
|
||||
console.error("安全令牌验证无法通过!")
|
||||
return Promise.reject(res.data)
|
||||
} else {
|
||||
Message.error(res.data.msg || "请求失败!")
|
||||
return !!res.config.returnError ? res.data : Promise.reject(res.data.msg)
|
||||
}
|
||||
} else return res.data
|
||||
} else {
|
||||
Message.error("服务器异常,请联系管理员!")
|
||||
}
|
||||
}, err => {
|
||||
if (err) {
|
||||
if (err.response) {
|
||||
if (err.response.status == 401) {
|
||||
console.error("安全令牌验证无法通过!")
|
||||
} else {
|
||||
console.error(err.response.statusText)
|
||||
}
|
||||
} else {
|
||||
console.error(err)
|
||||
}
|
||||
} else {
|
||||
console.error("通信异常,请联系管理员!")
|
||||
}
|
||||
})
|
||||
|
||||
export default instance
|
||||
211
ui/meta/js/utils.js
Normal file
211
ui/meta/js/utils.js
Normal file
@@ -0,0 +1,211 @@
|
||||
import {MessageBox} from 'element-ui'
|
||||
import $moment from './moment'
|
||||
import $dict from './dict'
|
||||
import $encryption from './encryption'
|
||||
import $coin from './coin'
|
||||
import Area from "./area"
|
||||
import ID from "./identity"
|
||||
|
||||
/**
|
||||
* 生成子节点的递归方法
|
||||
* @param parent 父元素
|
||||
* @param pending 待递归的数组
|
||||
* @param config 配置
|
||||
*/
|
||||
const addChild = (parent, pending, config) => {
|
||||
let conf = {
|
||||
key: 'id',
|
||||
parent: 'parentId',
|
||||
children: 'children',
|
||||
...config
|
||||
},
|
||||
doBeforeCount = pending.length
|
||||
for (let i = pending.length - 1; i >= 0; i--) {
|
||||
let e = pending[i]
|
||||
if (e[conf.parent] == parent[conf.key]) {
|
||||
parent[conf.children] = [...(parent[conf.children] || []), e]
|
||||
pending.splice(i, 1)
|
||||
}
|
||||
}
|
||||
parent[conf.children] &&
|
||||
(parent[conf.children] = parent[conf.children].reverse())
|
||||
if (pending.length > 0 && doBeforeCount > pending.length) {
|
||||
parent[conf.children].map(c => addChild(c, pending, conf))
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 数组转tree
|
||||
* @param list 待转化的数组
|
||||
* @param config 配置
|
||||
*/
|
||||
const $arr2tree = (list, config = {}) => {
|
||||
const {key = 'id', parent = 'parentId', children = 'children'} = config, result = [], itemMap = {}, ids = list?.map(e => `${e[key]}`)?.toString()
|
||||
for (const e of list) {
|
||||
const id = e[key], pid = e[parent]
|
||||
itemMap[id] = {...e, [children]: [itemMap[id]?.[children]].flat().filter(Boolean)}
|
||||
const treeItem = itemMap[id]
|
||||
if (!!pid && ids.indexOf(pid) > -1) {
|
||||
if (!itemMap[pid]) {
|
||||
itemMap[pid] = {
|
||||
children: [],
|
||||
}
|
||||
}
|
||||
itemMap[pid].children.push(treeItem)
|
||||
} else result.push(treeItem)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 封装提示框
|
||||
*/
|
||||
const $confirm = (content, options) => {
|
||||
return MessageBox.confirm(content, {
|
||||
type: 'warning',
|
||||
confirmButtonText: '确认',
|
||||
center: true,
|
||||
title: '提示',
|
||||
dangerouslyUseHTMLString: true,
|
||||
customClass: "AiConfirm",
|
||||
...options
|
||||
}).catch(() => 0)
|
||||
}
|
||||
|
||||
|
||||
const $decimalCalc = (...arr) => {
|
||||
// 确认提升精度
|
||||
let decimalLengthes = arr.map(e => {
|
||||
let index = ('' + e).indexOf('.')
|
||||
return ('' + e).length - index
|
||||
})
|
||||
let maxDecimal = Math.max(...decimalLengthes),
|
||||
precision = Math.pow(10, maxDecimal)
|
||||
// 计算
|
||||
let intArr = arr.map(e => (Number(e) || 0) * precision)
|
||||
// 返回计算值
|
||||
return intArr.reduce((t, a) => t + a) / precision
|
||||
}
|
||||
|
||||
/**
|
||||
* 封装权限判断方法
|
||||
*/
|
||||
const $permissions = flag => {
|
||||
let buttons = []
|
||||
if (localStorage.getItem('vuex')) {
|
||||
const vuex = JSON.parse(localStorage.getItem('vuex'))
|
||||
buttons = vuex.user.info.buttons
|
||||
}
|
||||
if (buttons && buttons.length > 0) {
|
||||
return buttons.some(b => b.id == flag || b.permission == flag)
|
||||
} else return false
|
||||
}
|
||||
|
||||
const $colorUtils = {
|
||||
Hex2RGBA(color, alpha = 1) {
|
||||
let hex = 0
|
||||
if (color.charAt(0) == '#') {
|
||||
if (color.length == 4) {
|
||||
// 检测诸如#FFF简写格式
|
||||
color =
|
||||
'#' +
|
||||
color.charAt(1).repeat(2) +
|
||||
color.charAt(2).repeat(2) +
|
||||
color.charAt(3).repeat(2)
|
||||
}
|
||||
hex = parseInt(color.slice(1), 16)
|
||||
}
|
||||
let r = (hex >> 16) & 0xff
|
||||
let g = (hex >> 8) & 0xff
|
||||
let b = hex & 0xff
|
||||
return `rgba(${r},${g},${b},${alpha})`
|
||||
},
|
||||
RGBtoHex(r, g, b) {
|
||||
let hex = (r << 16) | (g << 8) | b
|
||||
return '#' + hex.toString(16)
|
||||
}
|
||||
}
|
||||
export const $copy = any => {
|
||||
if (any) {
|
||||
return JSON.parse(JSON.stringify(any))
|
||||
} else return any
|
||||
}
|
||||
let debounceWait = null
|
||||
export const $debounce = (fn, wait) => {
|
||||
if (debounceWait !== null) clearTimeout(debounceWait);
|
||||
debounceWait = setTimeout(function () {
|
||||
typeof fn === 'function' && fn();
|
||||
}, wait);
|
||||
}
|
||||
export const $checkJson = str => {
|
||||
if (typeof str == 'string') {
|
||||
try {
|
||||
let obj = JSON.parse(str);
|
||||
return !!(typeof obj == 'object' && obj);
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
const $load = (sdk, interval = 200, name = "", c = 0) => {
|
||||
if (!!sdk) {
|
||||
return Promise.resolve()
|
||||
} else if (c < 10) {
|
||||
return new Promise(resolve => setTimeout(() => resolve($load(sdk, interval, name, ++c)), interval))
|
||||
} else return Promise.reject("无法加载" + name)
|
||||
}
|
||||
|
||||
export {Area, ID}
|
||||
|
||||
export default {
|
||||
addChild,
|
||||
$confirm,
|
||||
$decimalCalc,
|
||||
$dict,
|
||||
$permissions,
|
||||
$colorUtils,
|
||||
$moment,
|
||||
$encryption,
|
||||
$coin,
|
||||
$injectLib: (url, cb = () => 0) => {
|
||||
const scriptList = document.body.querySelectorAll('script')
|
||||
if (Object.values(scriptList || {}).findIndex(e => e.src == url) == -1) {
|
||||
const script = document.createElement('script')
|
||||
script.type = 'text/javascript'
|
||||
script.src = url
|
||||
script.addEventListener('load', () => cb())
|
||||
document.body.appendChild(script)
|
||||
} else cb()
|
||||
},
|
||||
$injectCss: (url, cb = () => 0) => {
|
||||
const linkList = document.body.querySelectorAll('link')
|
||||
if (Object.values(linkList || {}).findIndex(e => e.href == url) == -1) {
|
||||
const link = document.createElement('link')
|
||||
link.rel = "stylesheet"
|
||||
link.type = "text/css"
|
||||
link.href = url
|
||||
link.addEventListener('load', () => cb())
|
||||
document.head.appendChild(link)
|
||||
} else cb()
|
||||
},
|
||||
$dateFormat: (time, format) => {
|
||||
return $moment(time)
|
||||
.format(format || 'YYYY-MM-DD')
|
||||
.replace('Invalid Date', '')
|
||||
},
|
||||
$copy,
|
||||
$download: url => {
|
||||
fetch(url).then(res => res.blob()).then(blob => {
|
||||
const link = document.createElement('a')
|
||||
link.style.display = 'none'
|
||||
link.href = URL.createObjectURL(blob)
|
||||
document.body.appendChild(link)
|
||||
link.click()
|
||||
document.body.removeChild(link)
|
||||
})
|
||||
},
|
||||
$debounce,
|
||||
$checkJson,
|
||||
$arr2tree,
|
||||
$load
|
||||
}
|
||||
522
ui/meta/styles/ckeditor.scss
Normal file
522
ui/meta/styles/ckeditor.scss
Normal file
@@ -0,0 +1,522 @@
|
||||
/*
|
||||
* CKEditor 5 (v34.2.0) content styles.
|
||||
* Generated on Fri, 29 Jul 2022 13:03:52 GMT.
|
||||
* For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html
|
||||
*/
|
||||
|
||||
:root {
|
||||
--ck-color-base-active: hsl(208, 88%, 52%);
|
||||
--ck-color-image-caption-background: hsl(0, 0%, 97%);
|
||||
--ck-color-image-caption-text: hsl(0, 0%, 20%);
|
||||
--ck-color-mention-background: hsla(341, 100%, 30%, 0.1);
|
||||
--ck-color-mention-text: hsl(341, 100%, 30%);
|
||||
--ck-color-table-caption-background: hsl(0, 0%, 97%);
|
||||
--ck-color-table-caption-text: hsl(0, 0%, 20%);
|
||||
--ck-color-table-column-resizer-hover: var(--ck-color-base-active);
|
||||
--ck-highlight-marker-blue: hsl(201, 97%, 72%);
|
||||
--ck-highlight-marker-green: hsl(120, 93%, 68%);
|
||||
--ck-highlight-marker-pink: hsl(345, 96%, 73%);
|
||||
--ck-highlight-marker-yellow: hsl(60, 97%, 73%);
|
||||
--ck-highlight-pen-green: hsl(112, 100%, 27%);
|
||||
--ck-highlight-pen-red: hsl(0, 85%, 49%);
|
||||
--ck-image-style-spacing: 1.5em;
|
||||
--ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2);
|
||||
--ck-table-column-resizer-position-offset: calc(var(--ck-table-column-resizer-width) * -0.5 - 0.5px);
|
||||
--ck-table-column-resizer-width: 7px;
|
||||
--ck-todo-list-checkmark-size: 16px;
|
||||
--ck-z-default: 1;
|
||||
}
|
||||
|
||||
/* ckeditor5-block-quote/theme/blockquote.css */
|
||||
.ck-content blockquote {
|
||||
overflow: hidden;
|
||||
padding-right: 1.5em;
|
||||
padding-left: 1.5em;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
font-style: italic;
|
||||
border-left: solid 5px hsl(0, 0%, 80%);
|
||||
}
|
||||
|
||||
/* ckeditor5-block-quote/theme/blockquote.css */
|
||||
.ck-content[dir="rtl"] blockquote {
|
||||
border-left: 0;
|
||||
border-right: solid 5px hsl(0, 0%, 80%);
|
||||
}
|
||||
|
||||
/* ckeditor5-basic-styles/theme/code.css */
|
||||
.ck-content code {
|
||||
background-color: hsla(0, 0%, 78%, 0.3);
|
||||
padding: .15em;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
/* ckeditor5-font/theme/fontsize.css */
|
||||
.ck-content .text-tiny {
|
||||
font-size: .7em;
|
||||
}
|
||||
|
||||
/* ckeditor5-font/theme/fontsize.css */
|
||||
.ck-content .text-small {
|
||||
font-size: .85em;
|
||||
}
|
||||
|
||||
/* ckeditor5-font/theme/fontsize.css */
|
||||
.ck-content .text-big {
|
||||
font-size: 1.4em;
|
||||
}
|
||||
|
||||
/* ckeditor5-font/theme/fontsize.css */
|
||||
.ck-content .text-huge {
|
||||
font-size: 1.8em;
|
||||
}
|
||||
|
||||
/* ckeditor5-highlight/theme/highlight.css */
|
||||
.ck-content .marker-yellow {
|
||||
background-color: var(--ck-highlight-marker-yellow);
|
||||
}
|
||||
|
||||
/* ckeditor5-highlight/theme/highlight.css */
|
||||
.ck-content .marker-green {
|
||||
background-color: var(--ck-highlight-marker-green);
|
||||
}
|
||||
|
||||
/* ckeditor5-highlight/theme/highlight.css */
|
||||
.ck-content .marker-pink {
|
||||
background-color: var(--ck-highlight-marker-pink);
|
||||
}
|
||||
|
||||
/* ckeditor5-highlight/theme/highlight.css */
|
||||
.ck-content .marker-blue {
|
||||
background-color: var(--ck-highlight-marker-blue);
|
||||
}
|
||||
|
||||
/* ckeditor5-highlight/theme/highlight.css */
|
||||
.ck-content .pen-red {
|
||||
color: var(--ck-highlight-pen-red);
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* ckeditor5-highlight/theme/highlight.css */
|
||||
.ck-content .pen-green {
|
||||
color: var(--ck-highlight-pen-green);
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/image.css */
|
||||
.ck-content .image {
|
||||
display: table;
|
||||
clear: both;
|
||||
text-align: center;
|
||||
margin: 0.9em auto;
|
||||
min-width: 50px;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/image.css */
|
||||
.ck-content .image img {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
max-width: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/image.css */
|
||||
.ck-content .image-inline {
|
||||
/*
|
||||
* Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).;
|
||||
* Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root.
|
||||
* This strange behavior does not happen with inline-flex.
|
||||
*/
|
||||
display: inline-flex;
|
||||
max-width: 100%;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/image.css */
|
||||
.ck-content .image-inline picture {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/image.css */
|
||||
.ck-content .image-inline picture,
|
||||
.ck-content .image-inline img {
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-style-block-align-left,
|
||||
.ck-content .image-style-block-align-right {
|
||||
max-width: calc(100% - var(--ck-image-style-spacing));
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-style-align-left,
|
||||
.ck-content .image-style-align-right {
|
||||
clear: none;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-style-side {
|
||||
float: right;
|
||||
margin-left: var(--ck-image-style-spacing);
|
||||
max-width: 50%;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-style-align-left {
|
||||
float: left;
|
||||
margin-right: var(--ck-image-style-spacing);
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-style-align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-style-align-right {
|
||||
float: right;
|
||||
margin-left: var(--ck-image-style-spacing);
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-style-block-align-right {
|
||||
margin-right: 0;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-style-block-align-left {
|
||||
margin-left: 0;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content p + .image-style-align-left,
|
||||
.ck-content p + .image-style-align-right,
|
||||
.ck-content p + .image-style-side {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-inline.image-style-align-left,
|
||||
.ck-content .image-inline.image-style-align-right {
|
||||
margin-top: var(--ck-inline-image-style-spacing);
|
||||
margin-bottom: var(--ck-inline-image-style-spacing);
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-inline.image-style-align-left {
|
||||
margin-right: var(--ck-inline-image-style-spacing);
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagestyle.css */
|
||||
.ck-content .image-inline.image-style-align-right {
|
||||
margin-left: var(--ck-inline-image-style-spacing);
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imagecaption.css */
|
||||
.ck-content .image > figcaption {
|
||||
display: table-caption;
|
||||
caption-side: bottom;
|
||||
word-break: break-word;
|
||||
color: var(--ck-color-image-caption-text);
|
||||
background-color: var(--ck-color-image-caption-background);
|
||||
padding: .6em;
|
||||
font-size: .75em;
|
||||
outline-offset: -1px;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imageresize.css */
|
||||
.ck-content .image.image_resized {
|
||||
max-width: 100%;
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imageresize.css */
|
||||
.ck-content .image.image_resized img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* ckeditor5-image/theme/imageresize.css */
|
||||
.ck-content .image.image_resized > figcaption {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* ckeditor5-language/theme/language.css */
|
||||
.ck-content span[lang] {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* ckeditor5-list/theme/todolist.css */
|
||||
.ck-content .todo-list {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/* ckeditor5-list/theme/todolist.css */
|
||||
.ck-content .todo-list li {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
/* ckeditor5-list/theme/todolist.css */
|
||||
.ck-content .todo-list li .todo-list {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
/* ckeditor5-list/theme/todolist.css */
|
||||
.ck-content .todo-list .todo-list__label > input {
|
||||
-webkit-appearance: none;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: var(--ck-todo-list-checkmark-size);
|
||||
height: var(--ck-todo-list-checkmark-size);
|
||||
vertical-align: middle;
|
||||
border: 0;
|
||||
left: -25px;
|
||||
margin-right: -15px;
|
||||
right: 0;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
/* ckeditor5-list/theme/todolist.css */
|
||||
.ck-content .todo-list .todo-list__label > input::before {
|
||||
display: block;
|
||||
position: absolute;
|
||||
box-sizing: border-box;
|
||||
content: '';
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: 1px solid hsl(0, 0%, 20%);
|
||||
border-radius: 2px;
|
||||
transition: 250ms ease-in-out box-shadow, 250ms ease-in-out background, 250ms ease-in-out border;
|
||||
}
|
||||
|
||||
/* ckeditor5-list/theme/todolist.css */
|
||||
.ck-content .todo-list .todo-list__label > input::after {
|
||||
display: block;
|
||||
position: absolute;
|
||||
box-sizing: content-box;
|
||||
pointer-events: none;
|
||||
content: '';
|
||||
left: calc(var(--ck-todo-list-checkmark-size) / 3);
|
||||
top: calc(var(--ck-todo-list-checkmark-size) / 5.3);
|
||||
width: calc(var(--ck-todo-list-checkmark-size) / 5.3);
|
||||
height: calc(var(--ck-todo-list-checkmark-size) / 2.6);
|
||||
border-style: solid;
|
||||
border-color: transparent;
|
||||
border-width: 0 calc(var(--ck-todo-list-checkmark-size) / 8) calc(var(--ck-todo-list-checkmark-size) / 8) 0;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
/* ckeditor5-list/theme/todolist.css */
|
||||
.ck-content .todo-list .todo-list__label > input[checked]::before {
|
||||
background: hsl(126, 64%, 41%);
|
||||
border-color: hsl(126, 64%, 41%);
|
||||
}
|
||||
|
||||
/* ckeditor5-list/theme/todolist.css */
|
||||
.ck-content .todo-list .todo-list__label > input[checked]::after {
|
||||
border-color: hsl(0, 0%, 100%);
|
||||
}
|
||||
|
||||
/* ckeditor5-list/theme/todolist.css */
|
||||
.ck-content .todo-list .todo-list__label .todo-list__label__description {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* ckeditor5-media-embed/theme/mediaembed.css */
|
||||
.ck-content .media {
|
||||
clear: both;
|
||||
margin: 0.9em 0;
|
||||
display: block;
|
||||
min-width: 15em;
|
||||
}
|
||||
|
||||
/* ckeditor5-page-break/theme/pagebreak.css */
|
||||
.ck-content .page-break {
|
||||
position: relative;
|
||||
clear: both;
|
||||
padding: 5px 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* ckeditor5-page-break/theme/pagebreak.css */
|
||||
.ck-content .page-break::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-bottom: 2px dashed hsl(0, 0%, 77%);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* ckeditor5-page-break/theme/pagebreak.css */
|
||||
.ck-content .page-break__label {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
padding: .3em .6em;
|
||||
display: block;
|
||||
text-transform: uppercase;
|
||||
border: 1px solid hsl(0, 0%, 77%);
|
||||
border-radius: 2px;
|
||||
font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif;
|
||||
font-size: 0.75em;
|
||||
font-weight: bold;
|
||||
color: hsl(0, 0%, 20%);
|
||||
background: hsl(0, 0%, 100%);
|
||||
box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15);
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/tablecaption.css */
|
||||
.ck-content .table > figcaption {
|
||||
display: table-caption;
|
||||
caption-side: top;
|
||||
word-break: break-word;
|
||||
text-align: center;
|
||||
color: var(--ck-color-table-caption-text);
|
||||
background-color: var(--ck-color-table-caption-background);
|
||||
padding: .6em;
|
||||
font-size: .75em;
|
||||
outline-offset: -1px;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/table.css */
|
||||
.ck-content .table {
|
||||
margin: 0.9em auto;
|
||||
display: table;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/table.css */
|
||||
.ck-content .table table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: 1px double hsl(0, 0%, 70%);
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/table.css */
|
||||
.ck-content .table table td,
|
||||
.ck-content .table table th {
|
||||
min-width: 2em;
|
||||
padding: .4em;
|
||||
border: 1px solid hsl(0, 0%, 75%);
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/table.css */
|
||||
.ck-content .table table th {
|
||||
font-weight: bold;
|
||||
background: hsla(0, 0%, 0%, 5%);
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/table.css */
|
||||
.ck-content[dir="rtl"] .table th {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/table.css */
|
||||
.ck-content[dir="ltr"] .table th {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/tablecolumnresize.css */
|
||||
.ck-content .table table {
|
||||
overflow: hidden;
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/tablecolumnresize.css */
|
||||
.ck-content .table td,
|
||||
.ck-content .table th {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/tablecolumnresize.css */
|
||||
.ck-content .table .table-column-resizer {
|
||||
position: absolute;
|
||||
top: -999999px;
|
||||
bottom: -999999px;
|
||||
right: var(--ck-table-column-resizer-position-offset);
|
||||
width: var(--ck-table-column-resizer-width);
|
||||
cursor: col-resize;
|
||||
user-select: none;
|
||||
z-index: var(--ck-z-default);
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/tablecolumnresize.css */
|
||||
.ck-content .table[draggable] .table-column-resizer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/tablecolumnresize.css */
|
||||
.ck-content .table .table-column-resizer:hover,
|
||||
.ck-content .table .table-column-resizer__active {
|
||||
background-color: var(--ck-color-table-column-resizer-hover);
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/tablecolumnresize.css */
|
||||
.ck-content[dir=rtl] .table .table-column-resizer {
|
||||
left: var(--ck-table-column-resizer-position-offset);
|
||||
right: unset;
|
||||
}
|
||||
|
||||
/* ckeditor5-table/theme/tablecolumnresize.css */
|
||||
.ck-content.ck-read-only .table .table-column-resizer {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ckeditor5-code-block/theme/codeblock.css */
|
||||
.ck-content pre {
|
||||
padding: 1em;
|
||||
color: hsl(0, 0%, 20.8%);
|
||||
background: hsla(0, 0%, 78%, 0.3);
|
||||
border: 1px solid hsl(0, 0%, 77%);
|
||||
border-radius: 2px;
|
||||
text-align: left;
|
||||
direction: ltr;
|
||||
tab-size: 4;
|
||||
white-space: pre-wrap;
|
||||
font-style: normal;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
/* ckeditor5-code-block/theme/codeblock.css */
|
||||
.ck-content pre code {
|
||||
background: unset;
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
/* ckeditor5-horizontal-line/theme/horizontalline.css */
|
||||
.ck-content hr {
|
||||
margin: 15px 0;
|
||||
height: 4px;
|
||||
background: hsl(0, 0%, 87%);
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/* ckeditor5-mention/theme/mention.css */
|
||||
.ck-content .mention {
|
||||
background: var(--ck-color-mention-background);
|
||||
color: var(--ck-color-mention-text);
|
||||
}
|
||||
|
||||
@media print {
|
||||
/* ckeditor5-page-break/theme/pagebreak.css */
|
||||
.ck-content .page-break {
|
||||
padding: 0;
|
||||
}
|
||||
/* ckeditor5-page-break/theme/pagebreak.css */
|
||||
.ck-content .page-break::after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
673
ui/meta/styles/common.scss
Normal file
673
ui/meta/styles/common.scss
Normal file
@@ -0,0 +1,673 @@
|
||||
@import "iconfont/iconfont";
|
||||
@import 'iconfont/logofont';
|
||||
@import "ckeditor";
|
||||
@import "vars";
|
||||
|
||||
$cdn: "https://cdn.cunwuyun.cn/";
|
||||
$--color-primary: $primaryColor;
|
||||
$--color-text-placeholder: $placeholderColor;
|
||||
$--border-color-base: $borderColor;
|
||||
$--color-success: $successColor;
|
||||
$--color-warning: $warnColor;
|
||||
$--color-danger: $errorColor;
|
||||
$--color-info: $infoColor;
|
||||
$--font-path: '~element-ui/lib/theme-chalk/fonts';
|
||||
@import "~element-ui/packages/theme-chalk/src/index";
|
||||
|
||||
/**
|
||||
常用内外边距样式
|
||||
*/
|
||||
@each $padMar, $pm in (mar:margin, pad:padding) {
|
||||
@each $pos, $p in (l:left, r:right, t:top, b:bottom) {
|
||||
@each $v in (8, 10, 16, 20, 32, 48, 60) {
|
||||
.#{$padMar}-#{$pos+$v} {
|
||||
#{$pm}-#{$p}: #{$v}px
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
不换行文本
|
||||
*/
|
||||
.nowarp-text {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
/**
|
||||
表头式样
|
||||
*/
|
||||
.table-header {
|
||||
background-color: rgba(243, 246, 249, 1) !important;
|
||||
color: #333;
|
||||
line-height: 44px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
padding: 0 !important;
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/**
|
||||
表行样式
|
||||
*/
|
||||
.table-row {
|
||||
height: 44px;
|
||||
|
||||
&:hover, &:hover td.table-cell {
|
||||
background-color: #EFF6FF !important;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
表格样式
|
||||
*/
|
||||
.table-cell {
|
||||
font-size: 14px;
|
||||
padding: 0 !important;
|
||||
|
||||
.cell {
|
||||
line-height: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
图标统一样式
|
||||
*/
|
||||
.iconfont {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.iconShow:hover, .iconEdit:hover, .iconParent:hover, .iconChange:hover {
|
||||
color: $primaryColor;
|
||||
}
|
||||
|
||||
.iconDelete:hover {
|
||||
color: $errorColor;
|
||||
}
|
||||
|
||||
.iconBack_Large {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
color: $primaryColor;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/**
|
||||
缺省页相关样式
|
||||
*/
|
||||
.no-data {
|
||||
background: url("https://cdn.cunwuyun.cn/ui/svg/NoData.svg") no-repeat center;
|
||||
background-size: 120px 120px;
|
||||
height: 120px;
|
||||
margin: 48px auto 10px;
|
||||
}
|
||||
|
||||
/**
|
||||
缺省页相关样式
|
||||
*/
|
||||
.ai-empty__bg {
|
||||
background: url("https://cdn.cunwuyun.cn/ui/svg/empty.svg") no-repeat center;
|
||||
background-size: 120px 120px;
|
||||
height: 120px;
|
||||
margin: 48px auto 0;
|
||||
}
|
||||
|
||||
.no-permission {
|
||||
background: url("https://cdn.cunwuyun.cn/ui/svg/NoAuthority.svg") no-repeat center;
|
||||
background-size: 120px 120px;
|
||||
height: 120px;
|
||||
margin-top: 48px;
|
||||
}
|
||||
|
||||
.no-message {
|
||||
background: url("https://cdn.cunwuyun.cn/ui/svg/NoMessage.svg") no-repeat center;
|
||||
background-size: 120px 120px;
|
||||
height: 120px;
|
||||
margin-top: 48px;
|
||||
}
|
||||
|
||||
.done-success {
|
||||
background: url("https://cdn.cunwuyun.cn/ui/svg/Success.svg") no-repeat center;
|
||||
background-size: 120px 120px;
|
||||
height: 120px;
|
||||
}
|
||||
|
||||
.no-div-text {
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
color: #666
|
||||
}
|
||||
|
||||
.developing {
|
||||
background: url("https://cdn.cunwuyun.cn/ui/svg/developing.svg") no-repeat center;
|
||||
background-size: 400px 320px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
&:after {
|
||||
margin-top: 270px;
|
||||
font-size: 14px;
|
||||
color: $primaryColor;
|
||||
display: block;
|
||||
content: "功能正在开发中..."
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
placeholder 样式
|
||||
*/
|
||||
input::-webkit-input-placeholder {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
input::-moz-placeholder {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
input::-ms-input-placeholder {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
//切换地区Tab 样式
|
||||
.area-popover {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
//弹窗树菜单的样式
|
||||
.dialog-tree {
|
||||
&.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
|
||||
background: rgba(239, 246, 255, 1);
|
||||
border-radius: 2px;
|
||||
font-weight: normal;
|
||||
color: rgba(80, 136, 255, 1);
|
||||
}
|
||||
}
|
||||
|
||||
//发起群聊的按钮样式
|
||||
.openIM {
|
||||
width: 26px;
|
||||
height: 20px;
|
||||
background: rgba(255, 255, 255, 1);
|
||||
border-radius: 12px;
|
||||
border: 1px solid rgba(208, 212, 220, 1);
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
|
||||
&.iconGroup_IM {
|
||||
color: #89B;
|
||||
font-size: 16px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: $primaryColor;
|
||||
border-color: $primaryColor;
|
||||
|
||||
&.iconGroup_IM {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fuzzy {
|
||||
text-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
|
||||
color: transparent !important;
|
||||
}
|
||||
|
||||
/**
|
||||
马赛克样式
|
||||
*/
|
||||
.mosaic {
|
||||
position: relative;
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background-position: 0 0, 10px 10px;
|
||||
background-size: 20px 20px;
|
||||
background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee 100%), linear-gradient(45deg, #eee 25%, white 25%, white 75%, #eee 75%, #eee 100%);
|
||||
z-index: 202011051009;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
自定义弹性盒子快速用
|
||||
*/
|
||||
div[flex] {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
&.column {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
&.wrap {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
&.gap {
|
||||
gap: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.fill {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.el-input {
|
||||
input[type="number"] {
|
||||
-moz-appearance: textfield;
|
||||
|
||||
&::-webkit-outer-spin-button, &::-webkit-inner-spin-button {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 2.0公共样式
|
||||
|
||||
.ai-form {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
width: 100%;
|
||||
|
||||
.el-form-item {
|
||||
width: 50%;
|
||||
margin-bottom: 24px;
|
||||
|
||||
.el-form-item__content {
|
||||
margin-left: 134px !important;
|
||||
}
|
||||
|
||||
::v-deep.el-form-item__content {
|
||||
& .el-input--small, & > .el-range-editor--small, & > .el-cascader, & > .el-select {
|
||||
width: 325px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.el-message-box {
|
||||
width: 520px;
|
||||
padding-bottom: 0;
|
||||
|
||||
.el-message-box__header {
|
||||
padding-left: 40px;
|
||||
}
|
||||
|
||||
.el-message-box__content {
|
||||
padding-left: 77px;
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
.el-message-box__title {
|
||||
justify-content: start;
|
||||
font-size: 14px;
|
||||
|
||||
.el-icon-error:before {
|
||||
content: "\e7a3";
|
||||
}
|
||||
}
|
||||
|
||||
.el-message-box__status {
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
.el-message-box__message {
|
||||
text-align: start;
|
||||
font-size: 16px;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
min-height: 60px;
|
||||
}
|
||||
|
||||
.el-message-box__btns {
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
background-color: #F3F6F9;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 64px;
|
||||
|
||||
.el-button {
|
||||
padding: 0 32px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.table-options {
|
||||
.el-button--text {
|
||||
height: auto;
|
||||
margin-right: 8px !important;
|
||||
margin-left: 0 !important;
|
||||
padding: 0;
|
||||
border-radius: unset;
|
||||
|
||||
&:last-child {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
span {
|
||||
margin-right: 8px;
|
||||
color: $primaryColor;
|
||||
font-size: 14px;
|
||||
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
.is-disabled span {
|
||||
color: #999 !important;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
.el-button--primary {
|
||||
border: none;
|
||||
background: $primaryBtnColor;
|
||||
|
||||
&:hover {
|
||||
opacity: 0.6;
|
||||
background: $primaryBtnColor;
|
||||
}
|
||||
}
|
||||
|
||||
.el-button {
|
||||
font-size: 14px;
|
||||
border-radius: 2px;
|
||||
height: 32px;
|
||||
padding: 8px;
|
||||
box-sizing: border-box;
|
||||
|
||||
[class*=iconfont] {
|
||||
font-size: 14px;
|
||||
|
||||
& + span {
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.el-button--text [class*=iconfont] {
|
||||
color: inherit;
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
.wechat-message__container {
|
||||
padding: 8px !important;
|
||||
background: #F6F9FF !important;
|
||||
border-radius: 2px !important;
|
||||
color: #222222 !important;
|
||||
font-size: 14px !important;
|
||||
border: 1px solid $primaryColor !important;
|
||||
|
||||
h2 {
|
||||
color: #222222;
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3, p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.el-tooltip__popper {
|
||||
max-width: 600px;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
|
||||
.ai-personselect .el-input__suffix .el-input__validateIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.AiWechatSelecter-container .el-input__suffix .el-input__validateIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.AiWechatSelecter-container .el-input__suffix .el-input__validateIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.icon-color89B {
|
||||
color: #89B;
|
||||
}
|
||||
|
||||
// flex 布局
|
||||
.flex-between {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.flex-start {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.ailist-wrapper {
|
||||
div, p, h2, h1, h3, h5, span {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
|
||||
.mt10 {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.ai-scan {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
right: -14px;
|
||||
cursor: pointer;
|
||||
|
||||
.poptip-arrow {
|
||||
position: relative;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
padding: 0 10px;
|
||||
color: $primaryColor;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
background: $primaryLightColor;
|
||||
border: 1px solid $primaryColor;
|
||||
|
||||
em {
|
||||
position: absolute;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-color: hsla(0, 0%, 100%, 0);
|
||||
border-style: solid;
|
||||
overflow: hidden;
|
||||
top: 50%;
|
||||
right: -6px;
|
||||
transform: translateY(-50%);
|
||||
border-left-color: $primaryLightColor;
|
||||
border-width: 6px 0 6px 6px;
|
||||
}
|
||||
|
||||
a {
|
||||
position: absolute;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-color: hsla(0, 0%, 100%, 0);
|
||||
border-style: solid;
|
||||
overflow: hidden;
|
||||
top: 50%;
|
||||
right: -7px;
|
||||
transform: translateY(-50%);
|
||||
border-left-color: $primaryColor;
|
||||
border-width: 6px 0 6px 6px;
|
||||
}
|
||||
}
|
||||
|
||||
& > i {
|
||||
padding: 0;
|
||||
color: $primaryColor;
|
||||
font-size: 48px;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
背景图设置
|
||||
*/
|
||||
|
||||
.signLeftBg {
|
||||
background-image: url('#{$cdn}/ui/background/#{$theme}/loginLeft.png');
|
||||
}
|
||||
|
||||
.navBg {
|
||||
background-image: url('#{$cdn}/ui/background/#{$theme}/nav_bg.png');
|
||||
}
|
||||
|
||||
/**
|
||||
特殊样式字体
|
||||
*/
|
||||
.projectName {
|
||||
font-family: "Microsoft YaHei UI", "Microsoft YaHei", serif;
|
||||
height: 56px;
|
||||
line-height: 56px;
|
||||
font-size: 42px;
|
||||
font-weight: 800;
|
||||
white-space: nowrap;
|
||||
position: relative;
|
||||
text-shadow: 0 6px 3px rgba(#222, .1);
|
||||
color: transparent;
|
||||
|
||||
&:after {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
content: attr(title);
|
||||
background: $projectName;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
z-index: 99;
|
||||
}
|
||||
|
||||
&:before {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
content: attr(title);
|
||||
text-shadow: 3px 0 0 #fff, -3px 0 0 #fff, 0 -3px 0 #fff, 0 3px 0 #fff;
|
||||
z-index: 66;
|
||||
}
|
||||
}
|
||||
|
||||
.textShadow {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
text-shadow: 0 2px 0 $textShadow;
|
||||
color: transparent;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
#ai-waiting {
|
||||
color: $primaryColor
|
||||
}
|
||||
|
||||
.color-primary {
|
||||
color: $primaryColor
|
||||
}
|
||||
|
||||
.hoverActive {
|
||||
&:hover, &.current, &.isActive {
|
||||
color: $primaryColor !important;
|
||||
}
|
||||
}
|
||||
|
||||
/** 登录页左侧标题样式 **/
|
||||
.signLeftContent {
|
||||
.titlePane {
|
||||
margin-top: 124px;
|
||||
font-size: 20px;
|
||||
margin-bottom: 64px;
|
||||
|
||||
& > b {
|
||||
display: block;
|
||||
font-size: 40px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.subTitle {
|
||||
margin-bottom: 16px;
|
||||
opacity: 0.8;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
|
||||
&:before {
|
||||
content: " ";
|
||||
background: transparent;
|
||||
border-radius: 50%;
|
||||
border: 1px solid #fff;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.AiConfirm {
|
||||
position: fixed;
|
||||
z-index: 202210261023;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
/**
|
||||
节流器
|
||||
*/
|
||||
.throttle {
|
||||
animation: throttle 0.5s step-end forwards;
|
||||
}
|
||||
|
||||
.throttle:active {
|
||||
animation: none;
|
||||
}
|
||||
|
||||
@keyframes throttle {
|
||||
from {
|
||||
pointer-events: none;
|
||||
}
|
||||
to {
|
||||
pointer-events: all;
|
||||
}
|
||||
}
|
||||
958
ui/meta/styles/iconfont/iconfont.css
Normal file
958
ui/meta/styles/iconfont/iconfont.css
Normal file
@@ -0,0 +1,958 @@
|
||||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 1309749 */
|
||||
src: url('//at.alicdn.com/t/c/font_1309749_t7bf1dhlp7e.woff2?t=1666749875458') format('woff2'),
|
||||
url('//at.alicdn.com/t/c/font_1309749_t7bf1dhlp7e.woff?t=1666749875458') format('woff'),
|
||||
url('//at.alicdn.com/t/c/font_1309749_t7bf1dhlp7e.ttf?t=1666749875458') format('truetype');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-family: "iconfont" !important;
|
||||
font-size: 16px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.iconpingfenkaohe:before {
|
||||
content: "\e736";
|
||||
}
|
||||
|
||||
.iconcloss:before {
|
||||
content: "\e735";
|
||||
}
|
||||
|
||||
.iconzhengcefuwu:before {
|
||||
content: "\e731";
|
||||
}
|
||||
|
||||
.iconpeixunguanli:before {
|
||||
content: "\e730";
|
||||
}
|
||||
|
||||
.iconxiaoxizhongxin:before {
|
||||
content: "\e72f";
|
||||
}
|
||||
|
||||
.iconzhaopinhuiguanli:before {
|
||||
content: "\e72e";
|
||||
}
|
||||
|
||||
.iconshuzixiangcun:before {
|
||||
content: "\e72d";
|
||||
}
|
||||
|
||||
.iconteshurenqun:before {
|
||||
content: "\e72c";
|
||||
}
|
||||
|
||||
.iconzhengminhudong:before {
|
||||
content: "\e72b";
|
||||
}
|
||||
|
||||
.iconjicengzhili:before {
|
||||
content: "\e72a";
|
||||
}
|
||||
|
||||
.iconxiaochengxuguanli:before {
|
||||
content: "\e729";
|
||||
}
|
||||
|
||||
.iconyingjizhihui:before {
|
||||
content: "\e728";
|
||||
}
|
||||
|
||||
.iconjicengdangjian:before {
|
||||
content: "\e727";
|
||||
}
|
||||
|
||||
.iconxiangcunchanye:before {
|
||||
content: "\e726";
|
||||
}
|
||||
|
||||
.iconfangfanpin:before {
|
||||
content: "\e725";
|
||||
}
|
||||
|
||||
.iconnumber:before {
|
||||
content: "\e724";
|
||||
}
|
||||
|
||||
.iconattachments:before {
|
||||
content: "\e719";
|
||||
}
|
||||
|
||||
.icondate:before {
|
||||
content: "\e71a";
|
||||
}
|
||||
|
||||
.iconcard:before {
|
||||
content: "\e71b";
|
||||
}
|
||||
|
||||
.iconid:before {
|
||||
content: "\e71c";
|
||||
}
|
||||
|
||||
.iconcascade:before {
|
||||
content: "\e71d";
|
||||
}
|
||||
|
||||
.iconlocation:before {
|
||||
content: "\e71e";
|
||||
}
|
||||
|
||||
.iconname:before {
|
||||
content: "\e71f";
|
||||
}
|
||||
|
||||
.iconrich_text:before {
|
||||
content: "\e720";
|
||||
}
|
||||
|
||||
.iconphone_number:before {
|
||||
content: "\e721";
|
||||
}
|
||||
|
||||
.iconswitch:before {
|
||||
content: "\e722";
|
||||
}
|
||||
|
||||
.icontime:before {
|
||||
content: "\e723";
|
||||
}
|
||||
|
||||
.icondianliang:before {
|
||||
content: "\e711";
|
||||
}
|
||||
|
||||
.iconxueya:before {
|
||||
content: "\e714";
|
||||
}
|
||||
|
||||
.iconzhuangtai:before {
|
||||
content: "\e715";
|
||||
}
|
||||
|
||||
.iconxinlv:before {
|
||||
content: "\e716";
|
||||
}
|
||||
|
||||
.icontiwen:before {
|
||||
content: "\e717";
|
||||
}
|
||||
|
||||
.iconxueyang:before {
|
||||
content: "\e718";
|
||||
}
|
||||
|
||||
.iconzongzhizuzhi:before {
|
||||
content: "\e710";
|
||||
}
|
||||
|
||||
.iconvideolink:before {
|
||||
content: "\e70f";
|
||||
}
|
||||
|
||||
.iconfacial_recognition:before {
|
||||
content: "\e70e";
|
||||
}
|
||||
|
||||
.iconunpublish:before {
|
||||
content: "\e70c";
|
||||
}
|
||||
|
||||
.iconpreview:before {
|
||||
content: "\e708";
|
||||
}
|
||||
|
||||
.iconpublish:before {
|
||||
content: "\e709";
|
||||
}
|
||||
|
||||
.iconmore:before {
|
||||
content: "\e70a";
|
||||
}
|
||||
|
||||
.iconshare:before {
|
||||
content: "\e70b";
|
||||
}
|
||||
|
||||
.iconcheck_box:before {
|
||||
content: "\e700";
|
||||
}
|
||||
|
||||
.iconline:before {
|
||||
content: "\e701";
|
||||
}
|
||||
|
||||
.iconradio:before {
|
||||
content: "\e702";
|
||||
}
|
||||
|
||||
.icontext_box:before {
|
||||
content: "\e703";
|
||||
}
|
||||
|
||||
.icontext_area:before {
|
||||
content: "\e704";
|
||||
}
|
||||
|
||||
.iconpage:before {
|
||||
content: "\e705";
|
||||
}
|
||||
|
||||
.iconpic:before {
|
||||
content: "\e706";
|
||||
}
|
||||
|
||||
.iconSelect:before {
|
||||
content: "\e707";
|
||||
}
|
||||
|
||||
.iconhuluhuxian:before {
|
||||
content: "\e6f6";
|
||||
}
|
||||
|
||||
.iconkaoheguanli:before {
|
||||
content: "\e6f9";
|
||||
}
|
||||
|
||||
.iconhujiaozhongxin:before {
|
||||
content: "\e6fa";
|
||||
}
|
||||
|
||||
.iconliangxinzuzhi:before {
|
||||
content: "\e6fb";
|
||||
}
|
||||
|
||||
.iconxiaoyuananfang:before {
|
||||
content: "\e6fc";
|
||||
}
|
||||
|
||||
.iconzhongdianqingshaonian:before {
|
||||
content: "\e6fd";
|
||||
}
|
||||
|
||||
.iconanquanshengchan:before {
|
||||
content: "\e6fe";
|
||||
}
|
||||
|
||||
.iconshehuizhian:before {
|
||||
content: "\e6ff";
|
||||
}
|
||||
|
||||
.iconguangbofabu:before {
|
||||
content: "\e6f4";
|
||||
}
|
||||
|
||||
.iconwangshangbanshi:before {
|
||||
content: "\e6f3";
|
||||
}
|
||||
|
||||
.iconyunyingzhongxin:before {
|
||||
content: "\e6f1";
|
||||
}
|
||||
|
||||
.iconzhengwuweixin:before {
|
||||
content: "\e6f2";
|
||||
}
|
||||
|
||||
.iconkaoqinguanli:before {
|
||||
content: "\e6eb";
|
||||
}
|
||||
|
||||
.iconshijianguanli:before {
|
||||
content: "\e6ec";
|
||||
}
|
||||
|
||||
.iconyifangzhaoren:before {
|
||||
content: "\e6ed";
|
||||
}
|
||||
|
||||
.iconwanggeguanli:before {
|
||||
content: "\e6ee";
|
||||
}
|
||||
|
||||
.iconxinfangguanli:before {
|
||||
content: "\e6ef";
|
||||
}
|
||||
|
||||
.iconshipinjiankong:before {
|
||||
content: "\e6f0";
|
||||
}
|
||||
|
||||
.iconloudongmoxing:before {
|
||||
content: "\e6ea";
|
||||
}
|
||||
|
||||
.iconwanggeyuan:before {
|
||||
content: "\e6e8";
|
||||
}
|
||||
|
||||
.iconjinqishijian:before {
|
||||
content: "\e6e6";
|
||||
}
|
||||
|
||||
.iconxiaoquzonglan:before {
|
||||
content: "\e6e7";
|
||||
}
|
||||
|
||||
.iconloudongxinxi:before {
|
||||
content: "\e6e9";
|
||||
}
|
||||
|
||||
.iconchuangyebutie:before {
|
||||
content: "\e6db";
|
||||
}
|
||||
|
||||
.icondanweiguanli:before {
|
||||
content: "\e6dc";
|
||||
}
|
||||
|
||||
.iconjiuyefuwu:before {
|
||||
content: "\e6e2";
|
||||
}
|
||||
|
||||
.iconchuangyejiuyeguanli:before {
|
||||
content: "\e6e3";
|
||||
}
|
||||
|
||||
.iconchuangyedanbaodaikuan:before {
|
||||
content: "\e6e4";
|
||||
}
|
||||
|
||||
.icondaxueshengshixishixun:before {
|
||||
content: "\e6e5";
|
||||
}
|
||||
|
||||
.iconsearch:before {
|
||||
content: "\e732";
|
||||
}
|
||||
|
||||
.iconxqhd:before {
|
||||
content: "\e733";
|
||||
}
|
||||
|
||||
.iconwdhd:before {
|
||||
content: "\e734";
|
||||
}
|
||||
|
||||
.iconrobot:before {
|
||||
content: "\e6da";
|
||||
}
|
||||
|
||||
.iconfangda:before {
|
||||
content: "\e6d7";
|
||||
}
|
||||
|
||||
.iconsuoxiao:before {
|
||||
content: "\e6d8";
|
||||
}
|
||||
|
||||
.iconEarth:before {
|
||||
content: "\e6d9";
|
||||
}
|
||||
|
||||
.iconxianfengyeweihui:before {
|
||||
content: "\e6d6";
|
||||
}
|
||||
|
||||
.iconhuiyuanguanli:before {
|
||||
content: "\e6d1";
|
||||
}
|
||||
|
||||
.iconcunganbuguanli:before {
|
||||
content: "\e6d2";
|
||||
}
|
||||
|
||||
.iconzhaopinguanli:before {
|
||||
content: "\e6d3";
|
||||
}
|
||||
|
||||
.iconqiyeguanli:before {
|
||||
content: "\e6d5";
|
||||
}
|
||||
|
||||
.iconxingfujifen:before {
|
||||
content: "\e6ce";
|
||||
}
|
||||
|
||||
.iconxinxizhongxin:before {
|
||||
content: "\e6cf";
|
||||
}
|
||||
|
||||
.iconpinyipin:before {
|
||||
content: "\e6d0";
|
||||
}
|
||||
|
||||
.iconUnpublish:before {
|
||||
content: "\e6cc";
|
||||
}
|
||||
|
||||
.iconPublish:before {
|
||||
content: "\e6cd";
|
||||
}
|
||||
|
||||
.iconDelay:before {
|
||||
content: "\e6cb";
|
||||
}
|
||||
|
||||
.iconwarning:before {
|
||||
content: "\e6f5";
|
||||
}
|
||||
|
||||
.iconzpg:before {
|
||||
content: "\e6f7";
|
||||
}
|
||||
|
||||
.iconsqy:before {
|
||||
content: "\e6f8";
|
||||
}
|
||||
|
||||
.iconzxjyzdls:before {
|
||||
content: "\e6dd";
|
||||
}
|
||||
|
||||
.iconzxjygwgl:before {
|
||||
content: "\e6de";
|
||||
}
|
||||
|
||||
.iconzxjywdzy:before {
|
||||
content: "\e6df";
|
||||
}
|
||||
|
||||
.iconzxjycydb:before {
|
||||
content: "\e6e0";
|
||||
}
|
||||
|
||||
.iconzxjyckmb:before {
|
||||
content: "\e6e1";
|
||||
}
|
||||
|
||||
.iconarea:before {
|
||||
content: "\e6d4";
|
||||
}
|
||||
|
||||
.iconyiqingfangkong:before {
|
||||
content: "\e6ca";
|
||||
}
|
||||
|
||||
.iconPostil:before {
|
||||
content: "\e6c9";
|
||||
}
|
||||
|
||||
.iconjiaonadangfei:before {
|
||||
content: "\e6c8";
|
||||
}
|
||||
|
||||
.iconSuccess:before {
|
||||
content: "\e6c7";
|
||||
}
|
||||
|
||||
.iconAccount_Login:before {
|
||||
content: "\e6c5";
|
||||
}
|
||||
|
||||
.iconQR_code:before {
|
||||
content: "\e6c6";
|
||||
}
|
||||
|
||||
.iconMediaPlayer_Play:before {
|
||||
content: "\e6c3";
|
||||
}
|
||||
|
||||
.iconMediaPlayer_Stop:before {
|
||||
content: "\e6c4";
|
||||
}
|
||||
|
||||
.icondangyuan:before {
|
||||
content: "\e6b0";
|
||||
}
|
||||
|
||||
.iconEnvironment:before {
|
||||
content: "\e6bc";
|
||||
}
|
||||
|
||||
.iconLaw:before {
|
||||
content: "\e6bd";
|
||||
}
|
||||
|
||||
.iconjicengbangong:before {
|
||||
content: "\e6be";
|
||||
}
|
||||
|
||||
.iconjicengzhuzhi:before {
|
||||
content: "\e6bf";
|
||||
}
|
||||
|
||||
.iconwenmingxiangfeng:before {
|
||||
content: "\e6c0";
|
||||
}
|
||||
|
||||
.iconyangguangcunwu:before {
|
||||
content: "\e6c1";
|
||||
}
|
||||
|
||||
.iconminzhuyishi:before {
|
||||
content: "\e6c2";
|
||||
}
|
||||
|
||||
.iconshehuijiuzhu:before {
|
||||
content: "\e6b8";
|
||||
}
|
||||
|
||||
.iconshujugongxiang:before {
|
||||
content: "\e6b9";
|
||||
}
|
||||
|
||||
.iconjuminxinxi:before {
|
||||
content: "\e6ba";
|
||||
}
|
||||
|
||||
.iconxinxiguanli:before {
|
||||
content: "\e6bb";
|
||||
}
|
||||
|
||||
.iconRecommend:before {
|
||||
content: "\e6af";
|
||||
}
|
||||
|
||||
.iconqiandao:before {
|
||||
content: "\e6ad";
|
||||
}
|
||||
|
||||
.iconqingjia:before {
|
||||
content: "\e6ae";
|
||||
}
|
||||
|
||||
.iconhistogram:before {
|
||||
content: "\e6ac";
|
||||
}
|
||||
|
||||
.iconAudit:before {
|
||||
content: "\e6a9";
|
||||
}
|
||||
|
||||
.iconVerify:before {
|
||||
content: "\e6aa";
|
||||
}
|
||||
|
||||
.iconTransaction:before {
|
||||
content: "\e6ab";
|
||||
}
|
||||
|
||||
.iconEwm:before {
|
||||
content: "\e6a6";
|
||||
}
|
||||
|
||||
.iconIOS:before {
|
||||
content: "\e6a7";
|
||||
}
|
||||
|
||||
.iconAndroid:before {
|
||||
content: "\e6a8";
|
||||
}
|
||||
|
||||
.iconjdq_led_clean:before {
|
||||
content: "\e67a";
|
||||
}
|
||||
|
||||
.iconjdq_led_edit:before {
|
||||
content: "\e67b";
|
||||
}
|
||||
|
||||
.iconjdq_led_Led:before {
|
||||
content: "\e680";
|
||||
}
|
||||
|
||||
.iconjdq_led_Led1:before {
|
||||
content: "\e681";
|
||||
}
|
||||
|
||||
.iconjdq_led_Right:before {
|
||||
content: "\e688";
|
||||
}
|
||||
|
||||
.iconjdq_led_Ledjiesu:before {
|
||||
content: "\e689";
|
||||
}
|
||||
|
||||
.iconjdq_led_show:before {
|
||||
content: "\e68a";
|
||||
}
|
||||
|
||||
.iconjdq_led_Ledwx:before {
|
||||
content: "\e68b";
|
||||
}
|
||||
|
||||
.iconjdq_led_Lednrhg:before {
|
||||
content: "\e68c";
|
||||
}
|
||||
|
||||
.iconClean1:before {
|
||||
content: "\e6a4";
|
||||
}
|
||||
|
||||
.iconLoading:before {
|
||||
content: "\e6a5";
|
||||
}
|
||||
|
||||
.iconSubordinates:before {
|
||||
content: "\e6a1";
|
||||
}
|
||||
|
||||
.iconDownload:before {
|
||||
content: "\e6a2";
|
||||
}
|
||||
|
||||
.iconNext_Mission:before {
|
||||
content: "\e6a3";
|
||||
}
|
||||
|
||||
.iconAdmitted:before {
|
||||
content: "\e69c";
|
||||
}
|
||||
|
||||
.iconEmployment_Confirmation:before {
|
||||
content: "\e69d";
|
||||
}
|
||||
|
||||
.iconRepulsebeifen:before {
|
||||
content: "\e69e";
|
||||
}
|
||||
|
||||
.iconUpdate_Files:before {
|
||||
content: "\e69f";
|
||||
}
|
||||
|
||||
.iconRepulse:before {
|
||||
content: "\e6a0";
|
||||
}
|
||||
|
||||
.iconOverrule:before {
|
||||
content: "\e69a";
|
||||
}
|
||||
|
||||
.iconWithdrawn:before {
|
||||
content: "\e69b";
|
||||
}
|
||||
|
||||
.iconDetails:before {
|
||||
content: "\e699";
|
||||
}
|
||||
|
||||
.iconSpecial_Populations:before {
|
||||
content: "\e698";
|
||||
}
|
||||
|
||||
.iconPerson_Transfer:before {
|
||||
content: "\e693";
|
||||
}
|
||||
|
||||
.iconCreate_Files:before {
|
||||
content: "\e694";
|
||||
}
|
||||
|
||||
.iconPrint:before {
|
||||
content: "\e695";
|
||||
}
|
||||
|
||||
.iconPerson_Transfered:before {
|
||||
content: "\e696";
|
||||
}
|
||||
|
||||
.iconReject:before {
|
||||
content: "\e697";
|
||||
}
|
||||
|
||||
.iconGroup_IM:before {
|
||||
content: "\e692";
|
||||
}
|
||||
|
||||
.iconData_Screen:before {
|
||||
content: "\e68f";
|
||||
}
|
||||
|
||||
.iconCustomer_Service:before {
|
||||
content: "\e690";
|
||||
}
|
||||
|
||||
.iconDocumentation:before {
|
||||
content: "\e691";
|
||||
}
|
||||
|
||||
.iconTriangle_Up:before {
|
||||
content: "\e68d";
|
||||
}
|
||||
|
||||
.iconTriangle_Left:before {
|
||||
content: "\e68e";
|
||||
}
|
||||
|
||||
.iconDouble_Up:before {
|
||||
content: "\e686";
|
||||
}
|
||||
|
||||
.iconDouble_Down:before {
|
||||
content: "\e687";
|
||||
}
|
||||
|
||||
.iconServer:before {
|
||||
content: "\e685";
|
||||
}
|
||||
|
||||
.iconIM:before {
|
||||
content: "\e682";
|
||||
}
|
||||
|
||||
.iconStatistics:before {
|
||||
content: "\e683";
|
||||
}
|
||||
|
||||
.iconData_Reporting:before {
|
||||
content: "\e684";
|
||||
}
|
||||
|
||||
.iconMoveUp:before {
|
||||
content: "\e67c";
|
||||
}
|
||||
|
||||
.iconRevoke:before {
|
||||
content: "\e67d";
|
||||
}
|
||||
|
||||
.iconMoveDown:before {
|
||||
content: "\e67e";
|
||||
}
|
||||
|
||||
.iconAll_Profile:before {
|
||||
content: "\e67f";
|
||||
}
|
||||
|
||||
.iconzu:before {
|
||||
content: "\e712";
|
||||
}
|
||||
|
||||
.iconzu1:before {
|
||||
content: "\e713";
|
||||
}
|
||||
|
||||
.iconShow_Content:before {
|
||||
content: "\e66e";
|
||||
}
|
||||
|
||||
.iconShow:before {
|
||||
content: "\e66f";
|
||||
}
|
||||
|
||||
.iconCCP:before {
|
||||
content: "\e70d";
|
||||
}
|
||||
|
||||
.iconAlready_Read:before {
|
||||
content: "\e669";
|
||||
}
|
||||
|
||||
.iconRegister:before {
|
||||
content: "\e66a";
|
||||
}
|
||||
|
||||
.iconNotice:before {
|
||||
content: "\e66b";
|
||||
}
|
||||
|
||||
.iconUnfinished:before {
|
||||
content: "\e66c";
|
||||
}
|
||||
|
||||
.iconDate1:before {
|
||||
content: "\e664";
|
||||
}
|
||||
|
||||
.iconLogout:before {
|
||||
content: "\e665";
|
||||
}
|
||||
|
||||
.iconPhoto:before {
|
||||
content: "\e666";
|
||||
}
|
||||
|
||||
.iconResetting:before {
|
||||
content: "\e667";
|
||||
}
|
||||
|
||||
.iconProfile_Picture:before {
|
||||
content: "\e668";
|
||||
}
|
||||
|
||||
.iconModal_Success:before {
|
||||
content: "\e662";
|
||||
}
|
||||
|
||||
.iconModal_Warning:before {
|
||||
content: "\e663";
|
||||
}
|
||||
|
||||
.iconSteps_Finished:before {
|
||||
content: "\e660";
|
||||
}
|
||||
|
||||
.iconSteps_In_Progress:before {
|
||||
content: "\e661";
|
||||
}
|
||||
|
||||
.iconAdd_Subordinates:before {
|
||||
content: "\e65d";
|
||||
}
|
||||
|
||||
.iconAdd_Peers:before {
|
||||
content: "\e65e";
|
||||
}
|
||||
|
||||
.iconHide_Content:before {
|
||||
content: "\e65f";
|
||||
}
|
||||
|
||||
.iconLogo:before {
|
||||
content: "\e65c";
|
||||
}
|
||||
|
||||
.iconAdd:before {
|
||||
content: "\e657";
|
||||
}
|
||||
|
||||
.iconFunction_Management:before {
|
||||
content: "\e658";
|
||||
}
|
||||
|
||||
.iconDelete:before {
|
||||
content: "\e659";
|
||||
}
|
||||
|
||||
.iconExported:before {
|
||||
content: "\e65a";
|
||||
}
|
||||
|
||||
.iconImport:before {
|
||||
content: "\e65b";
|
||||
}
|
||||
|
||||
.iconTriangle_Down:before {
|
||||
content: "\e655";
|
||||
}
|
||||
|
||||
.iconTriangle_Right:before {
|
||||
content: "\e656";
|
||||
}
|
||||
|
||||
.iconNav_DataCenter:before {
|
||||
content: "\e650";
|
||||
}
|
||||
|
||||
.iconNav_Dashborad:before {
|
||||
content: "\e651";
|
||||
}
|
||||
|
||||
.iconNav_Pack_Up:before {
|
||||
content: "\e652";
|
||||
}
|
||||
|
||||
.iconNav_Setting:before {
|
||||
content: "\e653";
|
||||
}
|
||||
|
||||
.iconNav_Application:before {
|
||||
content: "\e654";
|
||||
}
|
||||
|
||||
.iconSkip:before {
|
||||
content: "\e64a";
|
||||
}
|
||||
|
||||
.iconSearch:before {
|
||||
content: "\e64b";
|
||||
}
|
||||
|
||||
.iconWeChat:before {
|
||||
content: "\e64c";
|
||||
}
|
||||
|
||||
.iconParent:before {
|
||||
content: "\e64e";
|
||||
}
|
||||
|
||||
.iconSetting:before {
|
||||
content: "\e64f";
|
||||
}
|
||||
|
||||
.iconChange:before {
|
||||
content: "\e63c";
|
||||
}
|
||||
|
||||
.iconBack_Large:before {
|
||||
content: "\e63d";
|
||||
}
|
||||
|
||||
.iconCorrect:before {
|
||||
content: "\e63e";
|
||||
}
|
||||
|
||||
.iconMessage:before {
|
||||
content: "\e63f";
|
||||
}
|
||||
|
||||
.iconDate:before {
|
||||
content: "\e640";
|
||||
}
|
||||
|
||||
.iconMore:before {
|
||||
content: "\e641";
|
||||
}
|
||||
|
||||
.iconEdit:before {
|
||||
content: "\e642";
|
||||
}
|
||||
|
||||
.iconPhone:before {
|
||||
content: "\e643";
|
||||
}
|
||||
|
||||
.iconClean:before {
|
||||
content: "\e644";
|
||||
}
|
||||
|
||||
.iconProlife:before {
|
||||
content: "\e645";
|
||||
}
|
||||
|
||||
.iconClock:before {
|
||||
content: "\e646";
|
||||
}
|
||||
|
||||
.iconLocation:before {
|
||||
content: "\e647";
|
||||
}
|
||||
|
||||
.iconPassword:before {
|
||||
content: "\e648";
|
||||
}
|
||||
|
||||
.iconCopy:before {
|
||||
content: "\e649";
|
||||
}
|
||||
|
||||
.iconArrow_Up:before {
|
||||
content: "\e638";
|
||||
}
|
||||
|
||||
.iconArrow_Left:before {
|
||||
content: "\e639";
|
||||
}
|
||||
|
||||
.iconArrow_Down:before {
|
||||
content: "\e63a";
|
||||
}
|
||||
|
||||
.iconArrow_Right:before {
|
||||
content: "\e63b";
|
||||
}
|
||||
1
ui/meta/styles/iconfont/iconfont.js
Normal file
1
ui/meta/styles/iconfont/iconfont.js
Normal file
File diff suppressed because one or more lines are too long
78
ui/meta/styles/iconfont/logofont.css
Normal file
78
ui/meta/styles/iconfont/logofont.css
Normal file
@@ -0,0 +1,78 @@
|
||||
@font-face {
|
||||
font-family: "logofont"; /* Project id 1557923 */
|
||||
src: url('//at.alicdn.com/t/c/font_1557923_ymu4rpvijlo.woff2?t=1661421638099') format('woff2'),
|
||||
url('//at.alicdn.com/t/c/font_1557923_ymu4rpvijlo.woff?t=1661421638099') format('woff'),
|
||||
url('//at.alicdn.com/t/c/font_1557923_ymu4rpvijlo.ttf?t=1661421638099') format('truetype');
|
||||
}
|
||||
|
||||
.logofont {
|
||||
font-family: "logofont" !important;
|
||||
font-size: 16px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.iconhuizhili:before {
|
||||
content: "\e720";
|
||||
}
|
||||
|
||||
.iconxiuxingtong1:before {
|
||||
content: "\e71e";
|
||||
}
|
||||
|
||||
.iconhuizhengwu2:before {
|
||||
content: "\e71a";
|
||||
}
|
||||
|
||||
.iconhuizhengwu:before {
|
||||
content: "\e719";
|
||||
}
|
||||
|
||||
.iconxiuxingtong:before {
|
||||
content: "\e717";
|
||||
}
|
||||
|
||||
.iconzgydzhsq:before {
|
||||
content: "\e6fb";
|
||||
}
|
||||
|
||||
.iconzhongguoyidong2:before {
|
||||
content: "\e6fa";
|
||||
}
|
||||
|
||||
.iconzhongguoyidong:before {
|
||||
content: "\e6f8";
|
||||
}
|
||||
|
||||
.iconcunwei:before {
|
||||
content: "\e6f3";
|
||||
}
|
||||
|
||||
.iconcunwei1:before {
|
||||
content: "\e6f0";
|
||||
}
|
||||
|
||||
.iconccb:before {
|
||||
content: "\e6d7";
|
||||
}
|
||||
|
||||
.iconzhongzhi:before {
|
||||
content: "\e6cb";
|
||||
}
|
||||
|
||||
.iconzxjy:before {
|
||||
content: "\e6c2";
|
||||
}
|
||||
|
||||
.iconLogo:before {
|
||||
content: "\e6a9";
|
||||
}
|
||||
|
||||
.iconminzhengju:before {
|
||||
content: "\e667";
|
||||
}
|
||||
|
||||
.iconzhongguoliantong:before {
|
||||
content: "\e618";
|
||||
}
|
||||
72
ui/meta/styles/theme.hzl.scss
Normal file
72
ui/meta/styles/theme.hzl.scss
Normal file
@@ -0,0 +1,72 @@
|
||||
$theme: "hzl";
|
||||
@import "common";
|
||||
.signLeftContent {
|
||||
color: #333;
|
||||
font-family: -apple-system, BlinkMacSystemFont, PingFang SC, Source Han Sans CN, Microsoft Yahei, sans-serif;
|
||||
|
||||
.titlePane {
|
||||
margin-top: 84px;
|
||||
margin-bottom: 40px;
|
||||
font-family: MicrosoftYaHei, sans-serif;
|
||||
}
|
||||
|
||||
.subTitle:before {
|
||||
border-color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.projectName {
|
||||
font-family: MicrosoftYaHeiS0pxibold;
|
||||
font-size: 48px;
|
||||
}
|
||||
|
||||
.ai-sign {
|
||||
width: 420px !important;
|
||||
|
||||
& > .el-row--flex {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.is-always-shadow {
|
||||
box-shadow: 0 24px 48px 0 rgba(15, 56, 139, 0.05);
|
||||
width: 420px !important;
|
||||
min-height: 430px;
|
||||
|
||||
& > .el-card__body {
|
||||
padding: 20px 40px;
|
||||
}
|
||||
|
||||
.ai-scan {
|
||||
right: -30px;
|
||||
|
||||
.iconfont {
|
||||
line-height: normal;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.reset-password-row {
|
||||
text-align: center !important;
|
||||
}
|
||||
}
|
||||
|
||||
.headerNav {
|
||||
.AiIcon {
|
||||
font-size: 28px !important;
|
||||
-webkit-text-fill-color: white !important;
|
||||
font-weight: normal !important;
|
||||
}
|
||||
|
||||
.headerTitle {
|
||||
font-family: FZZZHONGJW--GB1-0 !important;
|
||||
line-height: normal !important;
|
||||
font-weight: normal !important;
|
||||
-webkit-text-fill-color: white !important;
|
||||
}
|
||||
|
||||
.textShadow {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
7
ui/meta/styles/theme.yellow.scss
Normal file
7
ui/meta/styles/theme.yellow.scss
Normal file
@@ -0,0 +1,7 @@
|
||||
$theme: "yellow";
|
||||
$primaryColor: #f62;
|
||||
$primaryBtnColor: linear-gradient(90deg, #FFA322 0%, #FF6622 100%);
|
||||
$projectName: linear-gradient(180deg, #FFA322 0%, #FF6622 100%);
|
||||
$primaryLightColor: #FFF7F4;
|
||||
$textShadow: #CA693E;
|
||||
@import "common";
|
||||
12
ui/meta/styles/vars.scss
Normal file
12
ui/meta/styles/vars.scss
Normal file
@@ -0,0 +1,12 @@
|
||||
$primaryColor: #26f !default;
|
||||
$borderColor: #d0d4dc !default;
|
||||
$primaryBtnColor: linear-gradient(90deg, #299FFF 0%, #0C61FF 100%) !default;
|
||||
$successColor: #2EA222 !default;
|
||||
$warnColor: #F82 !default;
|
||||
$errorColor: #F46 !default;
|
||||
$infoColor: #8D96A9 !default;
|
||||
$theme: "blue" !default;
|
||||
$projectName: linear-gradient(180deg, #5AC4FF 11%, #1347B6 100%) !default;
|
||||
$primaryLightColor: rgba(239, 246, 255, 1) !default;
|
||||
$textShadow: #384DC3 !default;
|
||||
$placeholderColor: #888 !default;
|
||||
Reference in New Issue
Block a user