user.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <template>
  2. <HcCard actionSize="lg" scrollbar>
  3. <template #header>
  4. <div class="w-40">
  5. <el-select v-model="searchForm.postType" placeholder="选择岗位类型" clearable size="large">
  6. <el-option v-for="item in postOptions" :key="item.value" :label="item['label']" :value="item['value']"/>
  7. </el-select>
  8. </div>
  9. <div class="w-64 ml-3">
  10. <el-input v-model="searchForm.name" size="large" placeholder="请输入名称搜索" clearable @keyup="keyUpEvent"/>
  11. </div>
  12. <div class="ml-3">
  13. <el-button type="primary" @click="searchClick" size="large">
  14. <HcIcon name="search-2"/>
  15. <span>搜索</span>
  16. </el-button>
  17. </div>
  18. </template>
  19. <template #extra>
  20. <div class="ml-2">
  21. <el-button type="primary" @click="addClick" size="large">
  22. <span>创建账户</span>
  23. </el-button>
  24. </div>
  25. <div class="ml-2">
  26. <el-button type="danger" @click="cancelClick" size="large" :disabled="tableCheckedKeys.length <= 0">
  27. <span>注销账户</span>
  28. </el-button>
  29. </div>
  30. </template>
  31. <HcTable :column="tableColumn" :datas="tableData" isCheck @selection-change="tableSelectionChange" >
  32. <template #name="{row}">{{ row['name'] }}</template>
  33. <template #text="{row}">{{ row['text'] }}</template>
  34. <template #color="{row}">{{ row['color'] }}</template>
  35. <template #action="{row, index}">
  36. <el-button size="small" type="primary" @click="eidtModal">编辑</el-button>
  37. </template>
  38. </HcTable>
  39. <template #action>
  40. <HcPages :pages="searchForm" @change="pageChange"></HcPages>
  41. </template>
  42. </HcCard>
  43. <HcDialog :show="addModal" :title="modalTitle" @close="addModalClose" widths="80rem">
  44. <HcCard title="基础信息">
  45. <el-form ref="formUserRef" :model="formUserModel" :rules="formUserRules" label-position="left"
  46. size="large" >
  47. <el-form-item label="登录账号" prop="account">
  48. <el-input v-model="formUserModel.account" placeholder="" autocomplete="new-password" />
  49. </el-form-item>
  50. <el-form-item label="新的密码" prop="newPassword" >
  51. <el-input v-model="formUserModel.newPassword" placeholder="请输入新的密码" autocomplete="new-password"
  52. show-password type="password"/>
  53. </el-form-item>
  54. <el-form-item label="确认新密码" prop="newPassword1" >
  55. <el-input v-model="formUserModel.newPassword1" placeholder="请输入确认新密码" autocomplete="new-password"
  56. show-password type="password"/>
  57. </el-form-item>
  58. </el-form>
  59. </HcCard>
  60. <HcCard title="详细信息" class="mt-2">
  61. <el-form ref="formUserRef" :model="formUserModel" :rules="formUserRules" label-position="left"
  62. size="large">
  63. <el-form-item label="用户姓名" prop="real_name">
  64. <el-input v-model="formUserModel.real_name" />
  65. </el-form-item>
  66. <el-form-item prop="phone" label="手机号码">
  67. <el-input v-model="formUserModel.phone"
  68. placeholder="请输入绑定手机"/>
  69. </el-form-item>
  70. <el-form-item label="身份证号">
  71. <el-input v-model="formUserModel.idNumber" placeholder=""/>
  72. </el-form-item>
  73. <el-form-item label="机构信息" prop="real_name">
  74. <el-select v-model="value" class="m-2" placeholder="选择部门" size="large">
  75. <el-option
  76. v-for="item in options"
  77. :key="item.value"
  78. :label="item.label"
  79. :value="item.value"
  80. />
  81. </el-select>
  82. <el-select v-model="value" class="m-2" placeholder="选择岗位" size="large">
  83. <el-option
  84. v-for="item in options"
  85. :key="item.value"
  86. :label="item.label"
  87. :value="item.value"
  88. />
  89. </el-select>
  90. <el-select v-model="value" class="m-2" placeholder="是否为部门负责人" size="large">
  91. <el-option
  92. v-for="item in options"
  93. :key="item.value"
  94. :label="item.label"
  95. :value="item.value"
  96. />
  97. </el-select>
  98. </el-form-item>
  99. <el-form-item label="日单价">
  100. <el-input v-model="formUserModel.roleName" placeholder=""/>
  101. </el-form-item>
  102. <el-form-item label="启用状态">
  103. <el-select v-model="formUserModel.state" class="m-2" placeholder="" size="large">
  104. <el-option
  105. v-for="item in stateoptions"
  106. :key="item.value"
  107. :label="item.label"
  108. :value="item.value"
  109. />
  110. </el-select>
  111. </el-form-item>
  112. </el-form>
  113. </HcCard>
  114. <template #footer>
  115. <div class="dialog-footer">
  116. <el-button size="large" @click="addModal = false">
  117. <HcIcon name="close"/>
  118. <span>取消</span>
  119. </el-button>
  120. <el-button :loading="sureSignUserLoading" hc-btn type="primary" @click="sureSignUserClick">
  121. <HcIcon name="check"/>
  122. <span>确定创建</span>
  123. </el-button>
  124. </div>
  125. </template>
  126. </HcDialog>
  127. </template>
  128. <script setup>
  129. import {ref, watch} from "vue";
  130. import {useAppStore} from "~src/store";
  131. import {arrIndex, formValidate, getArrValue, isPhone} from "js-fast-way"
  132. const searchForm = ref({
  133. postType: '', name:'',
  134. current: 1, size: 20, total: 0
  135. })
  136. //分页被点击
  137. const pageChange = ({current, size}) => {
  138. searchForm.value.current = current
  139. searchForm.value.size = size
  140. }
  141. const postOptions = ref([
  142. {label: '所有', value: '1'},
  143. {label: '财务', value: '2'},
  144. {label: '总经理', value: '3'},
  145. {label: '会计', value: '4'},
  146. ])
  147. const searchClick=()=>{
  148. }
  149. const keyUpEvent=()=>{
  150. }
  151. const tableColumn = [
  152. {key: 'name', name: '用户名称'},
  153. {key: 'name', name: '账号ID'},
  154. {key: 'name', name: '密码'},
  155. {key: 'text', name: '所属部门'},
  156. {key: 'text', name: '岗位'},
  157. {key: 'text', name: '创建日期'},
  158. {key: 'text', name: '启用状态'},
  159. {key: 'action', name: '操作', width: 100}
  160. ]
  161. const tableData = ref([
  162. {name: '名称1', text: '文本1', color: 'red'},
  163. {name: '名称2', text: '文本2', color: 'blue'},
  164. {name: '名称3', text: '文本3', color: '无'}
  165. ])
  166. const tableCheckedKeys = ref([]);
  167. const tableSelectionChange = (rows) => {
  168. tableCheckedKeys.value = rows
  169. if(tableCheckedKeys.value.length>1){
  170. window.$message.warning('只能选择一条数据')
  171. }
  172. }
  173. const addModal = ref(false)
  174. const modalTitle=ref('新增')
  175. const eidtModal=()=>{
  176. modalTitle.value='编辑'
  177. addModal.value=true
  178. }
  179. //弹窗关闭
  180. const addModalClose = () => {
  181. console.log('弹窗关闭')
  182. addModal.value = false
  183. }
  184. const addClick=()=>{
  185. addModal.value = true
  186. }
  187. //基础信息表单
  188. const formUserRef = ref(null)
  189. const formUserModel = ref({})
  190. const formUserRules = {
  191. phone: {
  192. required: true,
  193. validator: (rule, value, callback) => {
  194. if (!value) {
  195. callback(new Error('请输入手机号'))
  196. } else if (!isPhone(value)) {
  197. callback(new Error('手机号码格式错误'))
  198. } else {
  199. callback()
  200. }
  201. },
  202. trigger: "blur"
  203. },
  204. account: {
  205. required: true,
  206. validator: (rule, value, callback) => {
  207. if (!value) {
  208. callback(new Error('请输入登录账号'))
  209. } else {
  210. callback()
  211. }
  212. },
  213. trigger: "blur"
  214. },
  215. newPassword: {
  216. required: true,
  217. validator: (rule, value, callback) => {
  218. if (!value) {
  219. callback(new Error('请输入新密码'))
  220. } else {
  221. callback()
  222. }
  223. },
  224. trigger: "blur"
  225. },
  226. newPassword1: {
  227. required: true,
  228. validator: (rule, value, callback) => {
  229. if (!value) {
  230. callback(new Error('请确认新密码'))
  231. } else {
  232. callback()
  233. }
  234. },
  235. trigger: "blur"
  236. },
  237. }
  238. const stateoptions=ref([
  239. {label: '启用', value: '1'},
  240. {label: '停用', value: '2'},
  241. ])
  242. const cancelClick=()=>{
  243. window?.$messageBox?.alert('您确定要注销[xxx] 的账户信息吗? 一旦注销数据将彻底清除,请谨慎操作?', '注销提醒', {
  244. showCancelButton: true,
  245. confirmButtonText: '确认注销',
  246. cancelButtonText: '取消',
  247. type: 'warning',
  248. callback: (action) => {
  249. if (action === 'confirm') {
  250. console.log(11111);
  251. }
  252. }
  253. })
  254. }
  255. </script>
  256. <style lang="scss" scoped>
  257. </style>
  258. <style lang="scss">
  259. </style>