Commit 6c2cfb63 authored by shiyl's avatar shiyl

add我的员工页面搭建

parent bc52f167
# 当前配置文件是否为根配置,是。
root = true
# 仅对当前项目的 kotlin 文件生效
[*.kt]
# 1. 字符编码集采用 UTF-8
charset = utf-8
# 2. 缩进时使用 空格 代替 Tab
indent_style = space
# 3. 设置缩进大小为 2 个空格
indent_size = 2
# 4. 换行结束符采用 LF, 即回车并换行.
end_of_line = lf
# 5. 文件最后一行保持空行, 若无则在格式化时自动添加.
insert_final_newline = true
# 6. 文件每一行的末尾保持空白. 若存在非可见字符, 则自动清除.
trim_trailing_whitespace = true
# 7. 最大行宽 140
max_line_length = 140
# 仅对当前项目的 java 文件生效
[*.java]
# 1. 字符编码集采用 UTF-8
charset = utf-8
# 2. 缩进时使用 空格 代替 Tab
indent_style = space
# 3. 设置缩进大小为 4 个空格
indent_size = 4
# 4. 换行结束符采用 LF, 即回车并换行.
end_of_line = lf
# 5. 文件最后一行保持空行, 若无则在格式化时自动添加.
insert_final_newline = true
# 6. 文件每一行的末尾保持空白. 若存在非可见字符, 则自动清除.
trim_trailing_whitespace = true
# 7. 最大行宽 120
max_line_length = 120
[*.md]
# MarkDown 语法中,空行含有特殊语义,此处避免在最后一行添加空行。
insert_final_newline = false
# MarkDown 语法中,尾部空格存在换行语义,此处避免删除其空格。
trim_trailing_whitespace = false
......@@ -62,4 +62,7 @@ dependencies {
api "com.yidian.xarc:xevent:0.0.3"
api "com.yidian.xpage:xpagenative:0.0.1"
implementation files('libs/openDefault-10.10.0.aar')
//https://github.com/CymChad/BaseRecyclerViewAdapterHelper
api "com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4"
}
\ No newline at end of file
package com.yidian.common.constant
/**
* 服务器返回状态码
*/
object ResultCode {
const val SUCCESS = 0 // 成功
const val INVALID = 104000 // token失效
}
......@@ -7,76 +7,78 @@ import com.google.gson.Gson
import com.google.gson.JsonParseException
import com.google.gson.reflect.TypeToken
import com.yidian.common.YdBaseApplication
import com.yidian.common.constant.ResultCode
import com.yidian.utils.ToastUtil
import io.reactivex.rxjava3.core.Observer
import io.reactivex.rxjava3.disposables.Disposable
import java.lang.reflect.ParameterizedType
import kotlin.reflect.typeOf
abstract class HttpResultSubscriber<T>(private var showProgress: Boolean = false): Observer<HttpResult<Any?>> {
private var isShowErrorMsg = true
abstract class HttpResultSubscriber<T>(private var showProgress: Boolean = false) : Observer<HttpResult<Any?>> {
private var isShowErrorMsg = true
override fun onSubscribe(d: Disposable) { //网络请求之前
if(showProgress){
override fun onSubscribe(d: Disposable) { //网络请求之前
if (showProgress) {
}
}
}
override fun onComplete() { //网络请求完成
if(showProgress){
override fun onComplete() { //网络请求完成
if (showProgress) {
}
}
}
override fun onError(e: Throwable) {
if (e.toString().contains("ConnectException") || e.toString().contains("Unable to resolve host")) {
if (isShowErrorMsg) {
ToastUtil.showToast(YdBaseApplication.context, "当前网络链接不畅,请检查您的网络情况")
}
} else if ("connect timed out" == e.message) {
if (isShowErrorMsg) {
ToastUtil.showToast(YdBaseApplication.context, "服务器连接超时")
}
} else if (e is JsonParseException || e.toString().contains("Json") || e.toString().contains("Gson")) {
if (isShowErrorMsg) {
ToastUtil.showToast(YdBaseApplication.context, "数据解析异常")
}
} else {
if (isShowErrorMsg) {
ToastUtil.showToast(YdBaseApplication.context, "网络请求异常")
}
}
onRequestFailure(Exception(e.toString()))
override fun onError(e: Throwable) {
if (e.toString().contains("ConnectException") || e.toString().contains("Unable to resolve host")) {
if (isShowErrorMsg) {
ToastUtil.showToast(YdBaseApplication.context, "当前网络链接不畅,请检查您的网络情况")
}
} else if ("connect timed out" == e.message) {
if (isShowErrorMsg) {
ToastUtil.showToast(YdBaseApplication.context, "服务器连接超时")
}
} else if (e is JsonParseException || e.toString().contains("Json") || e.toString().contains("Gson")) {
if (isShowErrorMsg) {
ToastUtil.showToast(YdBaseApplication.context, "数据解析异常")
}
} else {
if (isShowErrorMsg) {
ToastUtil.showToast(YdBaseApplication.context, "网络请求异常")
}
}
onRequestFailure(Exception(e.toString()))
}
override fun onNext(res: HttpResult<Any?>) {
if (res.code == 0) {
val type = (this.javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
val decodeResult = HttpParamsUtils.rsaDecryptResult<T>(res, type)
onRequestSuccess(decodeResult)
}else{
val decodeResult = HttpResult<T>()
decodeResult.code = res.code
decodeResult.reason = res.reason
decodeResult.status = res.status
onFailer(decodeResult)
ToastUtil.showToast(YdBaseApplication.context, res.reason)
}
override fun onNext(res: HttpResult<Any?>) {
if (res.code == ResultCode.SUCCESS) {
val type = (this.javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
val decodeResult = HttpParamsUtils.rsaDecryptResult<T>(res, type)
onRequestSuccess(decodeResult)
} else {
val decodeResult = HttpResult<T>()
decodeResult.code = res.code
decodeResult.reason = res.reason
decodeResult.status = res.status
onFailer(decodeResult)
ToastUtil.showToast(YdBaseApplication.context, res.reason)
}
}
abstract fun onSuccess(result: HttpResult<T>?)
abstract fun onFailer(result: HttpResult<T>?)
@SuppressLint("NewApi")
fun onRequestFailure(e: Throwable?) {
val result: HttpResult<T> = HttpResult()
result.code = -100
result.reason = e?.message
result.status = "failed"
onFailer(result)
}
abstract fun onSuccess(result: HttpResult<T>?)
abstract fun onFailer(result: HttpResult<T>?)
@SuppressLint("NewApi")
fun onRequestSuccess(result: HttpResult<T>?) {
onSuccess(result)
}
}
\ No newline at end of file
@SuppressLint("NewApi")
fun onRequestFailure(e: Throwable?) {
val result: HttpResult<T> = HttpResult()
result.code = -100
result.reason = e?.message
result.status = "failed"
onFailer(result)
}
@SuppressLint("NewApi")
fun onRequestSuccess(result: HttpResult<T>?) {
onSuccess(result)
}
}
......@@ -27,4 +27,9 @@
<color name="black_919191">#919191</color>
<color name="footer_loading_gray">#a8abb1</color>
<color name="commentSendBtn">#A7A69f</color>
<!--所有业务组件通用的颜色值在这定义-->
<color name="color_333333">#333333</color>
<color name="color_666666">#666666</color>
<color name="color_999999">#999999</color>
</resources>
package com.yidian.shenghuoquan.newscontent.personnel.adapter
import android.widget.TextView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.personnel.bean.AccountUser
import com.yidian.utils.ToastUtil
/**
* 我的员工列表的适配器
*/
class MyStaffListAdapter : BaseQuickAdapter<AccountUser, BaseViewHolder>(R.layout.item_staff_list) {
override fun convert(holder: BaseViewHolder, item: AccountUser) {
holder.getView<TextView>(R.id.tv_name).text = item.nickName
holder.getView<TextView>(R.id.tv_mobile).text = item.mobile
if (!item.roleList.isNullOrEmpty()) {
val sb = StringBuilder()
item.roleList.forEach {
sb.append("$it|")
}
holder.getView<TextView>(R.id.tv_role_list).text = sb
}
// 点击管理,进入员工信息
holder.getView<TextView>(R.id.tv_manage).setOnClickListener {
ToastUtil.showToast(context, "点击${item.nickName}")
}
}
}
......@@ -7,12 +7,12 @@ import com.google.gson.annotations.SerializedName
*/
data class AccountListDto(
@SerializedName("admin")
val admin: List<Admin>? = null,
val admin: List<AccountAdmin>? = null,
@SerializedName("users")
val users: List<User>? = null
val users: List<AccountUser>? = null
)
data class Admin(
data class AccountAdmin(
@SerializedName("life_account_id")
val lifeAccountId: Long? = null,
@SerializedName("merchant_id")
......@@ -31,7 +31,7 @@ data class Admin(
val userId: Long? = null
)
data class User(
data class AccountUser(
@SerializedName("life_account_id")
val lifeAccountId: Long? = null,
@SerializedName("merchant_id")
......@@ -48,4 +48,4 @@ data class User(
val showButton: Int? = null,
@SerializedName("user_id")
val userId: Int? = null
)
\ No newline at end of file
)
package com.yidian.shenghuoquan.newscontent.personnel.http
import com.yidian.shenghuoquan.newscontent.personnel.bean.AccountListDto
interface IPersonalAccountListCallback {
fun getAccountListSuccess(response: AccountListDto?)
fun getAccountListFailure(message: String?)
}
package com.yidian.shenghuoquan.newscontent.personnel.http
import com.yidian.common.http.HttpParamsUtils
import com.yidian.common.http.HttpResult
import com.yidian.common.http.HttpResultSubscriber
import com.yidian.common.http.TransformUtil
import com.yidian.http.ServiceFactory
import com.yidian.shenghuoquan.newscontent.http.CommonService
import com.yidian.shenghuoquan.newscontent.http.httpbean.IMobileLoginCallback
import com.yidian.shenghuoquan.newscontent.http.httpbean.MobileLoginBean
import com.yidian.shenghuoquan.newscontent.personnel.bean.AccountListDto
/**
* 人员管理远程数据源
*/
object PersonalRemoteDataSource {
/**
* 获取账号列表
*/
fun getAccountList(apiCallback: IPersonalAccountListCallback) {
val timeStamp = System.currentTimeMillis()
val publicParamsMap = HttpParamsUtils.getPublicParamsMap(timeStamp)
ServiceFactory.getInstance().createService(PersonalService::class.java)
.getAccountList(publicParamsMap)
.compose(TransformUtil.defaultSchedulers())
.subscribe(object : HttpResultSubscriber<AccountListDto?>() {
override fun onSuccess(result: HttpResult<AccountListDto?>?) {
apiCallback.getAccountListSuccess(result?.result)
}
override fun onFailer(result: HttpResult<AccountListDto?>?) {
apiCallback.getAccountListFailure(result?.reason)
}
})
}
}
package com.yidian.shenghuoquan.newscontent.personnel.http
import com.yidian.common.http.HttpResult
import io.reactivex.rxjava3.core.Observable
import retrofit2.http.*
/**
* 人员管理相关的请求
*/
interface PersonalService {
private companion object {
const val accountList = "/merchant/enterprise/get_account_role_list"
const val changeRole = "/merchant/enterprise/change_role"
const val sendMobileCode = "/merchant/enterprise/send_mobile_code"
const val checkMobileCode = "/merchant/enterprise/check_mobile_code"
const val addUser = "/merchant/enterprise/add_user"
const val disassociate = ""
}
/**
* 获取账号列表
*/
@GET(accountList)
fun getAccountList(@QueryMap commonParams: Map<String, String>): Observable<HttpResult<Any?>>
/**
* 更换生活号管理员
*/
@GET(changeRole)
fun getChangeRole(@QueryMap commonParams: Map<String, String>, @QueryMap params: Map<String, String?>): Observable<HttpResult<Any?>>
/**
* 变更管理员发送短信,老管理员/新管理员
*/
@GET(sendMobileCode)
fun getSendMobileCode(@QueryMap commonParams: Map<String, String>, @QueryMap params: Map<String, String?>): Observable<HttpResult<Any?>>
/**
* 变更管理员验证短信,老管理员/新管理员
*/
@GET(checkMobileCode)
fun getCheckMobileCode(@QueryMap commonParams: Map<String, String>, @QueryMap params: Map<String, String?>): Observable<HttpResult<Any?>>
/**
* 添加非管理员
*/
@Headers("Content-Type: application/json")
@POST(addUser)
fun postAddUser(@QueryMap commonParams: Map<String, String>, @Body requestParams: Map<String, String?>): Observable<HttpResult<Any?>>
/**
* 解除关系
*/
@GET(disassociate)
fun getDissolveRelationship(
@QueryMap commonParams: Map<String, String>,
@QueryMap params: Map<String, String?>
): Observable<HttpResult<Any?>>
}
......@@ -3,12 +3,22 @@ package com.yidian.shenghuoquan.newscontent.personnel.ui
import android.os.Bundle
import com.yidian.common.XRouterPathConstants.Companion.PERSONAL_MY_STAFF
import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.databinding.ActivityMyStaffBinding
import com.yidian.shenghuoquan.newscontent.personnel.adapter.MyStaffListAdapter
import com.yidian.shenghuoquan.newscontent.personnel.bean.AccountAdmin
import com.yidian.shenghuoquan.newscontent.personnel.bean.AccountListDto
import com.yidian.shenghuoquan.newscontent.personnel.http.IPersonalAccountListCallback
import com.yidian.shenghuoquan.newscontent.personnel.http.PersonalRemoteDataSource
import com.yidian.utils.ToastUtil
import com.yidian.xpage.XPageManager
/**
* 人员管理 —— 我的员工页面
*/
class MyStaffActivity : BaseActivity<ActivityMyStaffBinding>() {
class MyStaffActivity : BaseActivity<ActivityMyStaffBinding>(), IPersonalAccountListCallback {
private val myStaffAdapter: MyStaffListAdapter by lazy { MyStaffListAdapter() }
override fun createViewBinding(): ActivityMyStaffBinding {
return ActivityMyStaffBinding.inflate(layoutInflater)
......@@ -20,8 +30,49 @@ class MyStaffActivity : BaseActivity<ActivityMyStaffBinding>() {
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
// 请求账号列表
initClick()
initView()
PersonalRemoteDataSource.getAccountList(this)
}
private fun initView() {
viewBind.layoutCommonHeader.tvTitle.text = resources.getString(R.string.my_staff)
viewBind.rvStaffList.adapter = myStaffAdapter
}
private fun initClick() {
viewBind.layoutCommonHeader.ivBack.setOnClickListener {
XPageManager.pop(null)
}
// 更新管理员
viewBind.tvChange.setOnClickListener {
ToastUtil.showToast(this, "更换管理员")
}
// 点击添加
viewBind.tvAddStaff.setOnClickListener {
ToastUtil.showToast(this, "管理员工")
}
}
override fun getAccountListSuccess(response: AccountListDto?) {
response?.let {
it.admin?.get(0)?.let { it1 -> initManager(it1) }
myStaffAdapter.setList(it.users)
}
}
private fun initManager(admin: AccountAdmin) {
viewBind.tvName.text = admin.nickName
viewBind.tvMobile.text = admin.mobile
val stringBuilder = StringBuilder()
admin.roleList?.forEach {
stringBuilder.append("$it|")
}
viewBind.tvRole.text = stringBuilder
}
override fun getAccountListFailure(message: String?) {
}
}
\ No newline at end of file
}
package com.yidian.shenghuoquan.newscontent.utils
/**
* author: yinjiacheng
* date: 6/6/21 2:23 PM
......@@ -7,11 +8,32 @@ package com.yidian.shenghuoquan.newscontent.utils
*/
object SensitiveInfoUtil {
/**
* 身份证号码出生日期脱敏
*/
fun idCardNumEncrypt(content: String): String {
val rule = "(\\d{6})\\d{8}(\\d{4})"
return content.replace(rule.toRegex(), "$1********$2")
/**
* 身份证号码出生日期脱敏
*/
fun idCardNumEncrypt(content: String): String {
val rule = "(\\d{6})\\d{8}(\\d{4})"
return content.replace(rule.toRegex(), "$1********$2")
}
/**
* 身份证号前三后四脱敏
*/
fun idCardPartEncrypt(content: String): String {
if (content.isBlank() || content.length < 18) {
return content
}
}
\ No newline at end of file
return content.replace("(?<=\\w{3})\\w(?=\\w{4})", "*");
}
/**
* 手机号前三后四脱敏
*/
fun mobileEncrypt(mobile: String): String {
if (mobile.isBlank() || mobile.length != 11) {
return mobile
}
return mobile.replace("(\\d{3})\\d{4}(\\d{4})", "$1****$2")
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="12dp" />
<padding
android:bottom="2dp"
android:left="5dp"
android:right="5dp"
android:top="2dp" />
<stroke
android:width="1dp"
android:color="#DDDDDD" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="12dp"/>
<solid android:color="@color/white"/>
</shape>
\ No newline at end of file
......@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_F5F6F7"
android:orientation="vertical">
<include
......@@ -11,13 +12,118 @@
layout="@layout/layout_common_header" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="24dp"
android:gravity="center"
android:text="管理员"
android:textColor="@color/black_333333"
android:textSize="18sp" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="16dp"
android:background="@drawable/shape_person_bg"
android:minHeight="101dp"
android:padding="16dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_333333"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="店老大" />
<TextView
android:id="@+id/tv_change"
android:layout_width="48dp"
android:layout_height="28dp"
android:layout_marginEnd="16dp"
android:background="@drawable/shape_manage_bg"
android:gravity="center"
android:text="更换"
android:textColor="@color/color_333333"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_mobile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="@color/color_333333"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_name"
tools:text="188****9999" />
<TextView
android:id="@+id/tv_role"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="@color/color_999999"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_mobile"
tools:text="协作者管理|店铺管理协作者管理" />
</androidx.constraintlayout.widget.ConstraintLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="25dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="2dp"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="员工信息"
android:textColor="@color/black_333333"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_add_staff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="10dp"
android:text="添加"
android:textColor="@color/black_333333"
android:textSize="16sp" />
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_staff_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="我的员工页面"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:paddingStart="16dp"
android:paddingEnd="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="6"
tools:listitem="@layout/item_staff_list" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@drawable/shape_person_bg"
android:minHeight="101dp"
android:padding="16dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_333333"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="店小二" />
<TextView
android:id="@+id/tv_manage"
android:layout_width="48dp"
android:layout_height="28dp"
android:layout_marginEnd="16dp"
android:background="@drawable/shape_manage_bg"
android:gravity="center"
android:text="管理"
android:textColor="@color/color_333333"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_mobile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="@color/color_333333"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_name"
tools:text="188****9999" />
<TextView
android:id="@+id/tv_role_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="@color/color_999999"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_mobile"
tools:text="协作者管理|店铺管理协作者管理" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -41,4 +41,5 @@
<color name="base">#FF1852F1</color>
<color name="edit_text_border_blue">#1852F1</color>
<color name="edit_text_border_gray">#cccccc</color>
<color name="color_F5F6F7">#F5F5F5</color>
</resources>
\ No newline at end of file
......@@ -125,4 +125,6 @@
<string name="enterprise_legal_mobile">法人手机号</string>
<string name="individual_business_manager_name">经营者姓名</string>
<string name="my_staff">我的员工</string>
</resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment