CreateStaffForm.vue 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <template>
  2. <div id="create-staff-form-box">
  3. <el-dialog
  4. title="添加会员"
  5. :visible.sync="centerDialogVisible"
  6. width="50%"
  7. center>
  8. <el-form label-width="100px" class="clearfix" :model="form" ref="staffform" :rules="staffrules">
  9. <el-row>
  10. <el-col :span="12">
  11. <el-form-item label="姓名:" required prop="name">
  12. <el-input placeholder="请输入姓名" v-model="form.name">
  13. </el-input>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :span="12">
  17. <el-form-item label="手机号:" required prop="phone">
  18. <el-input placeholder="请输入手机号" v-model="form.phone">
  19. </el-input>
  20. </el-form-item>
  21. </el-col>
  22. </el-row>
  23. <el-row>
  24. <el-col :span="12">
  25. <el-form-item label="性别:" required prop="gender">
  26. <el-radio-group v-model="form.gender" @change="selectGender">
  27. <el-radio :label="gender.id" :value="gender.id" v-for="(gender, index) in genderOptions" :key="index">{{gender.name}}</el-radio>
  28. </el-radio-group>
  29. </el-form-item>
  30. </el-col>
  31. <el-col :span="12">
  32. <el-form-item label="生日:" required prop="birthday">
  33. <el-date-picker v-model="form.birthday" prefix-icon="el-icon-date" :editable="false" style="width: 100%;" type="date" placeholder="请选择日期" align="right" format="yyyy-MM-dd" value-format="yyyy-MM-dd" ></el-date-picker>
  34. </el-form-item>
  35. </el-col>
  36. </el-row>
  37. <el-row>
  38. <el-col :span="8">
  39. <el-form-item label="员工职称:" required prop="user_type">
  40. <template>
  41. <el-select v-model="form.user_type" placeholder="请选择">
  42. <el-option
  43. v-for="item in user_types"
  44. :key="item.index"
  45. :label="item.name"
  46. :value="item.index">
  47. </el-option>
  48. </el-select>
  49. </template>
  50. </el-form-item>
  51. </el-col>
  52. <el-col :span="6">
  53. <template>
  54. <el-select v-model="form.user_title" placeholder="请选择">
  55. <el-option
  56. v-for="item in user_titles"
  57. :key="item.index"
  58. :label="item.name"
  59. :value="item.index">
  60. </el-option>
  61. </el-select>
  62. </template>
  63. </el-col>
  64. <el-col :span="4">
  65. <el-form-item label="医生头像:" required prop="dochead">
  66. <el-upload
  67. class="avatar-uploader"
  68. action="https://upload.qiniup.com"
  69. :show-file-list="false"
  70. :on-success="handleAvatarSuccess"
  71. :before-upload="beforeAvatarUpload"
  72. :on-error="handleAvatarError"
  73. :data="uploadData">
  74. <img v-if="form.dochead" :src="form.dochead" class="avatar">
  75. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  76. </el-upload>
  77. </el-form-item>
  78. </el-col>
  79. </el-row>
  80. <el-row>
  81. <el-col :span="24">
  82. <el-form-item label="医生简介:" required prop="content">
  83. <keep-alive>
  84. <neditor ref="neditor"
  85. id="editor"
  86. v-bind:r_content="form.content">
  87. </neditor>
  88. </keep-alive>
  89. </el-form-item>
  90. </el-col>
  91. </el-row>
  92. </el-form>
  93. <span slot="footer" class="dialog-footer">
  94. <el-button @click="centerDialogVisible = false">取 消</el-button>
  95. <el-button type="primary" @click="addStaffInfo('staffform');">保存</el-button>
  96. </span>
  97. </el-dialog>
  98. </div>
  99. </template>
  100. <script>
  101. import Neditor from '@/components/Neditor'
  102. import {addStaffInfo} from '@/api/act/staffmanager'
  103. import {getToken} from '@/api/qiniu'
  104. import {getFileExtension,checkMobile,uParseTime} from '@/utils/tools'
  105. export default {
  106. name: "CreateStaffForm",
  107. components:{
  108. Neditor,
  109. },
  110. props:{
  111. staffsData:{
  112. type: Array,
  113. default: function () {
  114. return [];
  115. }
  116. }
  117. },
  118. data(){
  119. var checkMobileRule = (rule, value, callback) => {
  120. if (!checkMobile(value)) {
  121. callback(new Error('请填写正确的手机号'));
  122. }else {
  123. callback();
  124. }
  125. };
  126. return {
  127. crumbs: [
  128. { path: false, name: '系统设置' },
  129. { path: '/Systemsetting/staffmanagement', name: '员工管理' }
  130. ],
  131. centerDialogVisible: false,
  132. radio: '1',
  133. value: '',
  134. qiniuDomain: 'https://images.shengws.com/',
  135. uploadData: { token: '', key: '' },
  136. user_types: [
  137. { index: 2, name: '医生' },
  138. { index: 3, name: '护士' },
  139. { index: 4, name: '运营' },
  140. ],
  141. user_titles: [
  142. { index: 1, name: '医士' },
  143. { index: 2, name: '医师' },
  144. { index: 3, name: '住院医师' },
  145. { index: 4, name: '主治医师' },
  146. { index: 5, name: '副主任医师' },
  147. { index: 6, name: '主任医师' },
  148. { index: 7, name: '护士' },
  149. { index: 8, name: '护师' },
  150. { index: 9, name: '主管护师' },
  151. { index: 10, name: '副主任护师' },
  152. { index: 11, name: '主任护师' },
  153. { index: 12, name: '运营专员' },
  154. { index: 13, name: '运营主管' },
  155. ],
  156. imageUrl: '',
  157. form:{
  158. name:'',
  159. phone:'',
  160. birthday:'',
  161. gender:'',
  162. user_type:'',
  163. user_title:'',
  164. dochead:'',
  165. page:1,
  166. limit:10,
  167. content:'',
  168. },
  169. keyword:'',
  170. staffform:[],
  171. staffrules:{
  172. name: [{required: true, message: "姓名不能为空"},],
  173. phone: [{required: true,message:"手机号码不能为空"},{validator:checkMobileRule}],
  174. birthday: [{required: true,message:"生日不能为空"}],
  175. gender: [{required: true,message:"性别不能为空"}],
  176. user_type: [{required: true,message:"职称类别不能为空"}],
  177. user_title: [{required: true,message:"职称不能为空"}],
  178. content: [{required: true,message:"医生简介不能为空"}],
  179. dochead: [{required: true,message:"头像不能为空"}],
  180. },
  181. genderOptions:[
  182. {id:1, name:'男'},
  183. {id:2, name:'女'},
  184. ],
  185. staffData:[],
  186. }
  187. },
  188. methods:{
  189. open:function(){
  190. this.centerDialogVisible = true;
  191. },
  192. resetForm(formName) {
  193. if (typeof(this.$refs[formName]) !='undefined') {
  194. this.$refs[formName].resetFields();
  195. }
  196. },
  197. handleAvatarSuccess(res, file) {
  198. this.form.dochead = this.qiniuDomain + res.url;
  199. },
  200. beforeAvatarUpload(file) {
  201. const isJPG = file.type === 'image/jpeg';
  202. console.log("是什么呢",isJPG)
  203. const isLt2M = file.size / 1024 / 1024 < 2;
  204. if (!isJPG) {
  205. this.$message.error('上传头像图片只能是JPG或者png格式!');
  206. }
  207. if (!isLt2M) {
  208. this.$message.error('上传头像图片大小不能超过 2MB!');
  209. }
  210. var date = new Date()
  211. var ext = getFileExtension(file.name)
  212. var key = date.getFullYear() + (date.getMonth() + 1) + date.getDate() + date.getHours() + date.getMinutes() + date.getSeconds() +'_o_' + file.uid + '.' + ext;
  213. this.uploading = true;
  214. this.loadingText = '封面图片上传中'
  215. const _self = this
  216. return new Promise((resolve, reject) => {
  217. getToken().then(response => {
  218. const token = response.data.data.uptoken
  219. console.log("token是什么?",token)
  220. _self._data.uploadData.token = token
  221. _self._data.uploadData.key = key
  222. resolve(true)
  223. }).catch(err => {
  224. reject(false)
  225. })
  226. })
  227. },
  228. selectGender:function(gender) {
  229. if(gender == 2) {
  230. this.form.avatar = 'https://images.shengws.com/201809182128222.png';
  231. }else {
  232. this.form.avatar = 'https://images.shengws.com/201809182128111.png';
  233. }
  234. },
  235. handleAvatarError(err, file, fileList) {
  236. this.$message.error(err);
  237. return false
  238. },
  239. addStaffInfo(forName){
  240. this.form.content = this.$refs.neditor.content;
  241. console.log("文章内容",this.$refs.neditor.content)
  242. this.$refs[forName].validate((valid)=>{
  243. if(valid){
  244. addStaffInfo(this.form).then(response=>{
  245. if(response.data.state ==1){
  246. var staffInfo = response.data.data.staffInfo
  247. this.centerDialogVisible=false;
  248. this.staffsData.unshift(staffInfo);
  249. this.resetForm("staffform");
  250. this.$message.success("保存成功");
  251. }
  252. })
  253. }
  254. })
  255. },
  256. }
  257. }
  258. </script>
  259. <style scoped>
  260. .avatar-uploader{
  261. border: 1px dashed #d9d9d9;
  262. border-radius: 1px;
  263. cursor: pointer;
  264. position: relative;
  265. overflow: hidden;
  266. }
  267. .avatar-uploader{
  268. border-color: #d9d9d9;
  269. }
  270. .avatar-uploader-icon {
  271. font-size: 20px;
  272. color: #8c939d;
  273. width: 44px;
  274. height: 50px;
  275. line-height: 50px;
  276. text-align: center;
  277. }
  278. .avatar {
  279. width: 68px;
  280. height: 50px;
  281. display: block;
  282. }
  283. </style>